首页 > 解决方案 > 如何定义我应该如何处理无法竞争的移动屏幕 Android Studio?

问题描述

我在 Nexus6(1440,2560) 560 dpi 上有一张好照片。当我下载 APK 并将其发送给我的老师(她的手机也是 2560x1440(Motorola Droid Turbo))时,她手机上的下一张图片是: 在此处输入图像描述

应该期待什么:在此处输入图像描述

中间按钮应该在白色的地方,并且从右侧应该还有 2 个图像按钮。我创建了 layout-normal 和 layout-large。还创建了drawable-mdpi、ldpi、xdpi。我有什么办法??请帮助或提供任何有用的信息,以使此摩托罗拉的屏幕尺寸与 Nexus 6 上的相同。

布局.xml 代码:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">


<ImageView
android:id="@+id/main_background"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:scaleType="centerCrop"
    android:src="@drawable/fon" />

<LinearLayout
    android:id="@+id/goLay"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:layout_editor_absoluteX="1dp"
    tools:layout_editor_absoluteY="45dp">

    <ImageButton
        android:id="@+id/cup"
        android:layout_width="43dp"
        android:layout_height="39dp"
        android:layout_marginStart="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="450dp"
        android:layout_marginBottom="50dp"
        android:background="?android:attr/selectableItemBackground"
        android:scaleType="centerCrop"
        android:src="@drawable/cup" />

    <ImageButton
        android:id="@+id/menu"
        android:layout_width="43dp"
        android:layout_height="39dp"
        android:layout_marginStart="30dp"
        android:layout_marginLeft="50dp"
        android:layout_marginTop="450dp"
        android:layout_marginBottom="50dp"
        android:background="?android:attr/selectableItemBackground"
        android:scaleType="centerCrop"
        android:src="@drawable/menu" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="horizontal">


        <ImageButton

            android:id="@+id/play"
            android:layout_width="119dp"
            android:layout_height="22dp"

            android:layout_marginStart="295dp"
            android:layout_marginLeft="54dp"
            android:layout_marginTop="480dp"
            android:layout_marginBottom="50dp"

            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/play"/>
        <ImageButton
            android:id="@+id/settings"
            android:layout_width="48dp"
            android:layout_height="44dp"

            android:layout_marginStart="180dp"
            android:layout_marginLeft="50dp"
            android:layout_marginTop="450dp"
            android:layout_marginBottom="50dp"

            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/settings" />

        <ImageButton
            android:id="@+id/coins"
            android:layout_width="48dp"
            android:layout_height="44dp"

            android:layout_marginStart="15dp"
            android:layout_marginLeft="50dp"
            android:layout_marginTop="450dp"
            android:layout_marginBottom="50dp"

            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/coins" />

    </LinearLayout>


</LinearLayout>

标签: androidandroid-studio

解决方案


问题在于非常大的边距值和每英寸像素密度的差异。Nexus 6 对角线为 6 英寸,而摩托罗拉 Droid Turbo 为 5.2 英寸。简单地说,就是顶部边距为 的视图1 dp将在 Motorola Droid Turbo 上传播得更远,因为它的 ppi 密度约为 565 ppi(每英寸像素),而 Nexus 6 的 ppi 只有 ~493 ppi。更多关于屏幕尺寸

尝试使用ConstraintLayout.

我会给你一个例子,你会根据需要更新它。注意我用换行符分隔的属性。这些定义了您的视图的相对位置。“谁在谁旁边”。

在它开始工作之前,您需要再添加一个依赖项:

dependencies {
    ...
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}

有关如何添加依赖项的更多信息。

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ImageView
        android:id="@+id/main_background"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:scaleType="centerCrop"
        android:src="@drawable/fon" />

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <ImageButton
            android:id="@+id/cup"
            android:layout_width="43dp"
            android:layout_height="39dp"
            android:layout_marginStart="16dp"
            android:layout_marginBottom="50dp"
            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/cup"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

        <ImageButton
            android:id="@+id/menu"
            android:layout_width="43dp"
            android:layout_height="39dp"
            android:layout_marginStart="16dp"
            android:layout_marginBottom="50dp"
            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/menu"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintStart_toEndOf="@+id/cup" />


        <ImageButton
            android:id="@+id/play"
            android:layout_width="119dp"
            android:layout_height="22dp"
            android:layout_marginBottom="50dp"
            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/play"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />


        <ImageButton
            android:id="@+id/settings"
            android:layout_width="48dp"
            android:layout_height="44dp"
            android:layout_marginLeft="16dp"
            android:layout_marginBottom="50dp"
            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/settings"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/coins" />

        <ImageButton
            android:id="@+id/coins"
            android:layout_width="48dp"
            android:layout_height="44dp"
            android:layout_marginEnd="16dp"
            android:layout_marginBottom="50dp"
            android:background="?android:attr/selectableItemBackground"
            android:scaleType="centerCrop"
            android:src="@drawable/coins"

            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent" />

    </androidx.constraintlayout.widget.ConstraintLayout>

</FrameLayout>

推荐阅读