【发布时间】:2019-09-11 10:57:45
【问题描述】:
enter image description here我已经为数学测验创建了一个布局,在第一个屏幕上,一个带有加法、减法等选项的网格布局作为按钮提供。下面是“赚取的硬币”TextView。在网格布局上方有应用的名称。
选择测验类型后,就会生成问题。在此屏幕上,应用程序名称位于顶部。在其下方,同一行中有“计时器”“级别”“分数”。在它们下方,有一个 2*2 的答案网格,有 4 个选项。
在答案网格下方,有一个 resultTextView 显示 qn 是对还是错。在其下方有显示该测验的点的文本视图(runTimeTextView)。
计时器结束后,有一个 endResultTextView 提供有关测验的信息,并伴有 playAgainButton。
布局在我的手机上通过 USB 调试工作正常,但在较小的屏幕尺寸上失败。我在 Android Studio 上选择了最小的手机。需要有关此版本的 Android Studio 3.4.2 的帮助。
我尝试了三个选项:
硬编码布局大小并手动更改其位置
将约束放置在视图顶部附加到视图底部的视图上方和视图底部到父级。
-
将约束放置在视图顶部附加到其上方视图底部并将视图底部约束到其下方视图顶部。
<TextView android:id="@+id/nameTextView" android:layout_width="341dp" android:layout_height="70dp" android:layout_marginStart="35dp" android:layout_marginTop="20dp" android:layout_marginEnd="35dp" android:layout_marginBottom="20dp" android:fontFamily="@font/allerta_stencil" android:text="MathGames[enter image description here][1]" android:textAlignment="center" android:textColor="#FF6D00" android:textSize="40sp" app:layout_constraintBottom_toTopOf="@+id/levelTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <TextView android:id="@+id/levelTextView" android:layout_width="85dp" android:layout_height="31dp" android:layout_marginStart="30dp" android:layout_marginTop="20dp" android:layout_marginEnd="30dp" android:layout_marginBottom="10dp" android:fontFamily="@font/aref_ruqaa_bold" android:text="Level 25" android:textAllCaps="true" android:textColor="#FF5252" android:textSize="20sp" android:textStyle="bold" android:visibility="invisible" app:layout_constraintBottom_toTopOf="@+id/questionTextView" app:layout_constraintEnd_toStartOf="@+id/scoreTextView" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toEndOf="@+id/timerTextView" app:layout_constraintTop_toBottomOf="@+id/nameTextView" app:layout_constraintVertical_bias="0.5" /> <TextView android:id="@+id/timerTextView" android:layout_width="85dp" android:layout_height="35dp" android:layout_marginLeft="10dp" android:layout_marginTop="20dp" android:layout_marginRight="30dp" android:layout_marginBottom="20dp" android:fontFamily="@font/alegreya_sans_sc_medium" android:textColor="#FF9100" android:textSize="20sp" app:layout_constraintBottom_toTopOf="@+id/questionTextView" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toLeftOf="@+id/levelTextView" app:layout_constraintTop_toBottomOf="@id/nameTextView" app:layout_constraintVertical_bias="0.5" /> <TextView android:id="@+id/questionTextView" android:layout_width="354dp" android:layout_height="56dp" android:layout_marginStart="30dp" android:layout_marginTop="20dp" android:layout_marginEnd="30dp" android:layout_marginBottom="20dp" android:fontFamily="@font/alegreya_sans_sc_medium" android:textColor="#00E9FF" android:textSize="25sp" app:layout_constraintBottom_toTopOf="@+id/answerGrid" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/levelTextView" /> <TextView android:id="@+id/scoreTextView" android:layout_width="104dp" android:layout_height="35dp" android:layout_marginStart="30dp" android:layout_marginTop="20dp" android:layout_marginEnd="10dp" android:layout_marginBottom="20dp" android:fontFamily="@font/alegreya_sans_sc_medium" android:textColor="#FF9100" android:textSize="25sp" app:layout_constraintBottom_toTopOf="@+id/questionTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/levelTextView" app:layout_constraintTop_toBottomOf="@id/nameTextView" /> <androidx.gridlayout.widget.GridLayout android:id="@+id/answerGrid" android:layout_width="369dp" android:layout_height="234dp" android:layout_marginStart="28dp" android:layout_marginTop="20dp" android:layout_marginEnd="28dp" android:layout_marginBottom="20dp" android:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/resultTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/questionTextView"> <Button android:id="@+id/optionA" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#86CC4B" android:fontFamily="@font/aldrich" android:includeFontPadding="true" android:onClick="checkAnswer" android:tag="0" android:text="Button" android:textColor="#FFFFFF" android:textSize="25sp" android:visibility="invisible" app:layout_column="0" app:layout_columnWeight="1" app:layout_gravity="fill" app:layout_row="0" app:layout_rowWeight="1" /> <Button android:id="@+id/optionB" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#D52A2A" android:fontFamily="@font/aldrich" android:includeFontPadding="true" android:onClick="checkAnswer" android:tag="1" android:text="Button" android:textColor="#FFFFFF" android:textSize="25sp" android:visibility="invisible" app:layout_column="0" app:layout_columnWeight="1" app:layout_gravity="fill" app:layout_row="1" app:layout_rowWeight="1" /> <Button android:id="@+id/optionC" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#26B8B8" android:fontFamily="@font/aldrich" android:includeFontPadding="true" android:onClick="checkAnswer" android:tag="2" android:text="Button" android:textColor="#FFFFFF" android:textSize="25sp" android:visibility="invisible" app:layout_column="1" app:layout_columnWeight="1" app:layout_gravity="fill" app:layout_row="0" app:layout_rowWeight="1" /> <Button android:id="@+id/optionD" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="#D6D606" android:fontFamily="@font/aldrich" android:includeFontPadding="true" android:onClick="checkAnswer" android:tag="3" android:text="Button" android:textColor="#FFFFFF" android:textSize="25sp" android:visibility="invisible" app:layout_column="1" app:layout_columnWeight="1" app:layout_gravity="fill" app:layout_row="1" app:layout_rowWeight="1" /> </androidx.gridlayout.widget.GridLayout> <androidx.gridlayout.widget.GridLayout /* I am facing biggest problem android:id="@+id/gridLayout" with this layout when not android:layout_width="369dp" hardcoding the sizes*/ android:layout_height="445dp" android:layout_marginStart="10dp" android:layout_marginTop="20dp" android:layout_marginEnd="10dp" android:layout_marginBottom="20dp" android:visibility="visible" app:layout_constraintBottom_toTopOf="@+id/coinTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/nameTextView"> <Button android:id="@+id/startAddition" android:layout_width="359dp" android:layout_height="80dp" android:background="#5719E0" android:fadingEdge="horizontal" android:fontFamily="@font/bubblegum_sans" android:onClick="startQuiz" android:tag="0" android:text="Addition " android:textAllCaps="false" android:textColor="#FCF6F6" android:textSize="25sp" android:textStyle="italic" android:visibility="visible" app:layout_column="0" app:layout_gravity="fill" app:layout_row="0" app:layout_rowWeight="1" /> <Button android:id="@+id/startSubtraction" android:layout_width="359dp" android:layout_height="80dp" android:background="#B80909" android:fontFamily="@font/bubblegum_sans" android:onClick="startQuiz" android:tag="1" android:text="Subtraction" android:textAllCaps="false" android:textColor="#FCF6F6" android:textSize="25sp" android:textStyle="italic" android:visibility="visible" app:layout_column="0" app:layout_gravity="fill" app:layout_row="1" app:layout_rowWeight="1" /> <Button android:id="@+id/startMultiplication" android:layout_width="359dp" android:layout_height="80dp" android:background="#60A80B" android:fontFamily="@font/bubblegum_sans" android:onClick="startQuiz" android:tag="2" android:text="Multiplication" android:textAllCaps="false" android:textColor="#FCF6F6" android:textSize="25sp" android:textStyle="italic" android:visibility="visible" app:layout_column="0" app:layout_gravity="fill" app:layout_row="2" app:layout_rowWeight="1" /> <Button android:id="@+id/startDivision" android:layout_width="359dp" android:layout_height="80dp" android:background="#E75222" android:fontFamily="@font/bubblegum_sans" android:onClick="startQuiz" android:tag="3" android:text="Division" android:textAllCaps="false" android:textColor="#FCF6F6" android:textSize="25sp" android:textStyle="italic" android:visibility="visible" app:layout_column="0" app:layout_gravity="fill" app:layout_row="3" app:layout_rowWeight="1" /> <Button android:id="@+id/startSquare" android:layout_width="359dp" android:layout_height="80dp" android:background="#776120" android:fontFamily="@font/bubblegum_sans" android:onClick="startQuiz" android:tag="4" android:text="Square" android:textAllCaps="false" android:textColor="#FCF6F6" android:textSize="25sp" android:textStyle="italic" android:visibility="visible" app:layout_column="0" app:layout_gravity="fill" app:layout_row="4" app:layout_rowWeight="1" /> </androidx.gridlayout.widget.GridLayout> <TextView android:id="@+id/resultTextView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="100dp" android:layout_marginTop="20dp" android:layout_marginEnd="100dp" android:layout_marginBottom="10dp" android:textAlignment="center" android:textColor="#0BFFC2" android:textDirection="ltr" android:textSize="25sp" android:visibility="invisible" app:layout_constraintBottom_toTopOf="@+id/runTimeTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/answerGrid" app:layout_constraintVertical_bias="0.5" /> <TextView android:id="@+id/endResultTextView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="20dp" android:layout_marginTop="20dp" android:layout_marginEnd="20dp" android:layout_marginBottom="20dp" android:background="#EED382" android:fontFamily="@font/walter_turncoat" android:padding="10dp" android:paddingStart="10dp" android:paddingLeft="10dp" android:textAppearance="@style/TextAppearance.AppCompat.Display4" android:textColor="#0A0A0A" android:textSize="20sp" android:textStyle="bold|italic" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/nameTextView" /> <Button android:id="@+id/playAgainButton" android:layout_width="216dp" android:layout_height="50dp" android:layout_marginStart="40dp" android:layout_marginEnd="40dp" android:layout_marginBottom="20dp" android:background="#E65100" android:fontFamily="@font/atomic_age" android:onClick="getMenu" android:text="Play Again" android:textColor="#FFD600" android:textSize="20sp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="@id/endResultTextView" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.65" app:layout_constraintStart_toStartOf="parent" /> <TextView android:id="@+id/runTimeTextView" android:layout_width="0dp" android:layout_height="0dp" android:layout_marginStart="100dp" android:layout_marginTop="20dp" android:layout_marginEnd="100dp" android:layout_marginBottom="20dp" android:fontFamily="@font/kite_one" android:textAlignment="center" android:textAppearance="@style/TextAppearance.AppCompat.Large" android:textColor="#F3D25E" android:textSize="20sp" android:textStyle="bold" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/resultTextView" app:layout_constraintVertical_bias="0.5" /> <TextView android:id="@+id/coinTextView" android:layout_width="286dp" android:layout_height="62dp" android:layout_marginStart="60dp" android:layout_marginTop="20dp" android:layout_marginEnd="60dp" android:layout_marginBottom="30dp" android:background="#000000" android:fontFamily="@font/playball" android:textColor="#FFEA00" android:textSize="30sp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/gridLayout" app:layout_constraintVertical_bias="0.5" />
我希望布局匹配设备的大小。
已发布图片。在顶部有带有游戏名称的 TextView。已将文字替换为 MathGames,因为该应用的实际名称尚未披露。
【问题讨论】:
-
避免为视图设置宽度和高度的绝对值,并尽量使用匹配父级和包装内容来设置值。
-
我尝试使用匹配约束参数。但是我应该对所有视图使用所有 4 个约束吗?如果是的话,我应该把它们放在哪里。将它们与相邻视图或父视图匹配?就我而言,两者都不起作用。
-
medium.com 链接不适用于最新版本
标签: android android-layout android-constraintlayout screen-size android-screen-support