使用ConstraintLayout我看到了这个问题:在手机上,小部件的分辨率是正常的,几乎占据了所有 屏幕空间:
但是当我切换到平板电脑的分辨率时,所有小部件都会变小并且无法在屏幕上查看:
如何在所有分辨率和设备上使小部件的分辨率看起来正常?
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TableLayout
android:id="@+id/table_l"
android:layout_width="297dp"
android:layout_height="329dp"
android:layout_weight="1"
android:layout_x="57dp"
android:layout_y="202dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
</TableRow>
</TableLayout>
<Button
android:id="@+id/st"
android:layout_width="178dp"
android:layout_height="wrap_content"
android:layout_x="120dp"
android:layout_y="112dp"
android:text="start"
app:layout_constraintBottom_toTopOf="@+id/table_l"
app:layout_constraintEnd_toEndOf="@+id/table_l"
app:layout_constraintHorizontal_bias="0.495"
app:layout_constraintStart_toStartOf="@+id/table_l"
app:layout_constraintTop_toTopOf="parent"
android:layout_weight="1"
app:layout_constraintVertical_bias="0.647" />
<TextView
android:id="@+id/X_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="48dp"
android:layout_x="118dp"
android:layout_y="608dp"
android:text="x:"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/O_text"
app:layout_constraintStart_toStartOf="@+id/O_text"
app:layout_constraintTop_toBottomOf="@+id/O_text" />
<TextView
android:id="@+id/O_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="36dp"
android:layout_x="116dp"
android:layout_y="661dp"
android:text="o:"
android:textSize="30sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/table_l"
app:layout_constraintHorizontal_bias="0.153"
app:layout_constraintStart_toStartOf="@+id/table_l"
app:layout_constraintTop_toBottomOf="@+id/table_l"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/textView3"
android:layout_width="27dp"
android:layout_height="47dp"
android:layout_marginTop="36dp"
android:textSize="36sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.139"
app:layout_constraintStart_toEndOf="@+id/O_text"
app:layout_constraintTop_toBottomOf="@+id/table_l"
app:layout_constraintVertical_bias="0.0" />
<TextView
android:id="@+id/textView4"
android:layout_width="25dp"
android:layout_height="45dp"
android:layout_marginBottom="52dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.151"
app:layout_constraintStart_toEndOf="@+id/X_text"
app:layout_constraintTop_toBottomOf="@+id/textView3"
app:layout_constraintVertical_bias="0.571" />
</androidx.constraintlayout.widget.ConstraintLayout>
答案 0 :(得分:0)
您应该为不同的屏幕尺寸创建布局xml文件。例如;如果您的应用在7英寸平板电脑上运行,则必须将新布局创建为layout-sw600dp。
查看此link以获得更多详细信息。
答案 1 :(得分:0)
您应该停止对布局使用固定大小和x / y位置。可能会有例外,但是总的来说,所有视图都应该能够动态调整自身大小。这意味着,您几乎从不使用固定值作为宽度,而是使用wrap_content
或match_parent
。经过4年的android开发,我还必须找到一种情况,需要使用layout_x
和layout_y
XML标签。
否则,此布局在大屏幕上将很小,而在小屏幕上将不适合。
对于90%的布局,您只需要ConstraintLayout
甚至是LinearLayout
。 RelativeLayout
几乎已经过时。
在这里详尽解释如何正确安排用户界面。相反,我建议您花一些时间来阅读类似google codelab on building a responsive UI with constraintlayouts的教程。如果操作正确,则可以构建一个看起来不错的智能手机和平板电脑用户界面。
但是,如果您希望平板电脑具有完全不同的布局,那么@MustafaYanık的方法是正确的。然后,您需要在其他子文件夹中创建第二个布局。