android - 如何定义我应该如何处理无法竞争的移动屏幕 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>
解决方案
问题在于非常大的边距值和每英寸像素密度的差异。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>
推荐阅读
- css - 连续翻译和缩放图像
- apache - 在 debian 10 上使用 apache 配置 varnish ssl
- python - 带连字符的文本换行
- python - 'issubclass() arg 2 must be a class or tuple of classes'在gridsearchCV中的错误
- openapi-generator - 使用openapi-generator生成客户端时如何覆盖服务器-> url(基本路径)?
- elasticsearch - 将子句转换为 ES 语法的 ElasticSearch lucene 查询
- uml - 如何使用 PlantUML 在更高级别的序列图中开始新的生命线
- css - CSS避免列在容器中“传播”
- php - 创建一个具有树查询的sql语句?SQL
- linux - 结构“struct page”存储在linux内核的哪里?