我正在尝试制作我的第一个Android应用程序,允许我增加或减少显示的数字。我的问题是,当我在Android Studio中查看应用的designer view时看起来不错,但是,当我在emulator上运行应用时,按钮全部位于屏幕的左上角。我的项目支持Android 4.0。它可能是非常简单的东西,但这是我的第一个应用程序,我真的不知道从哪里开始。下面是我的项目的XML代码。感谢您提前提供任何帮助/建议。
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
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="com.example.tyler.mtglifecounter.MainActivity">
<TextView
android:id="@+id/lifeTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20"
android:textAlignment="center"
android:textSize="70sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.184" />
<Button
android:id="@+id/plusOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ 1"
android:textSize="20sp"
tools:layout_editor_absoluteX="82dp"
tools:layout_editor_absoluteY="230dp"/>
<Button
android:id="@+id/minusOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="- 1"
android:textSize="20sp"
tools:layout_editor_absoluteX="213dp"
tools:layout_editor_absoluteY="230dp" />
<Button
android:id="@+id/plusFive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ 5"
android:textSize="20sp"
tools:layout_editor_absoluteX="82dp"
tools:layout_editor_absoluteY="330dp" />
<Button
android:id="@+id/minusfive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="- 5"
android:textSize="20sp"
tools:layout_editor_absoluteX="213dp"
tools:layout_editor_absoluteY="330dp" />
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset"
android:textSize="14sp"
tools:layout_editor_absoluteX="148dp"
tools:layout_editor_absoluteY="429dp" />
答案 0 :(得分:1)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
orientation="vertical"
gravity="center"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.tyler.mtglifecounter.MainActivity">
<TextView
android:id="@+id/lifeTotal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="20"
android:textAlignment="center"
android:textSize="70sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.184" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
orientation="horizontal"
gravity="center">
<Button
android:id="@+id/plusOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ 1"
android:textSize="20sp"
tools:layout_editor_absoluteX="82dp"
tools:layout_editor_absoluteY="230dp"/>
<Button
android:id="@+id/minusOne"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="- 1"
android:textSize="20sp"
tools:layout_editor_absoluteX="213dp"
tools:layout_editor_absoluteY="230dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
orientation="horizontal"
gravity="center">
<Button
android:id="@+id/plusFive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="+ 5"
android:textSize="20sp"
tools:layout_editor_absoluteX="82dp"
tools:layout_editor_absoluteY="330dp" />
<Button
android:id="@+id/minusfive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="- 5"
android:textSize="20sp"
tools:layout_editor_absoluteX="213dp"
tools:layout_editor_absoluteY="330dp" />
</LinearLayout>
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Reset"
android:textSize="14sp"
tools:layout_editor_absoluteX="148dp"
tools:layout_editor_absoluteY="429dp" />
</LinearLayout>
答案 1 :(得分:1)
您的问题是编辑器添加的tools:layout_editor_absoluteX
和tools:layout_editor_absoluteY
属性,它们在编译的应用程序中没有实际效果。删除它们并尝试使用文本视图放置元素(由xml预览引导,而不是设计视图)。
如果您刚开始使用Android,我建议您尝试更简单的布局,例如RelativeLayout
答案 2 :(得分:1)
"RestartPolicy": {
"Condition": "on-failure",
"Delay": 10000000000,
"MaxAttempts": 10
}
最近才成为ConstraintLayout
的默认布局,如果不了解基础架构的工作原理,那就很难了。
Android Studio
和tools:layout_editor_absoluteX
值仅在编辑器中应用定位,我不确定为什么这些存在,因为他们过去常常混淆我。这就是为什么它在tools:layout_editor_absoluteY
中看起来不正确,但在设备上看起来不正确。
要对齐按钮的目的是使用约束,类似于使用以下对齐Design View
:
TextView
这样做是将app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
置于屏幕中间,然后是行:
TextView
给按钮一个0.184的垂直偏差。 0.5将直接在中间,所以这是在页面上移动它(0.5 - 0.184 =)31.6%。
因此,为了做你想做的事,你将首先使用以下内容将app:layout_constraintVertical_bias="0.184"
约束到父母:
Button
(这样做会将app:layout_constraintBottom_toBottomOf="parent"
的底部限制在页面的底部),然后你需要给它一个余量来将它设置得远远低于底部:
Button
然后将它水平居中,你会添加:
android:layout_marginBottom=16dp
您可以在不输入代码的情况下执行上述操作,您可以单击按钮的圆形边缘,然后将它们拖动到布局中的相关位置,以便它们单击到位。 您不想只需点击并拖动按钮,因为这只会导致app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
更改。
要使接下来的两组按钮位于正确的位置会更复杂。看看Chains。正如先前的回答所说,Design View
非常先进,ConstraintLayout
更容易,但我认为如果你深入了解如何使用{{1},它会带来好处。因为这将使将来更容易。
您需要先将第二行按钮约束到底部按钮,然后使用相同的想法将第一行按钮约束到第二行。