我正在创建一个Android应用程序,按钮没有排列在我将它们放入设计器

时间:2017-03-15 14:55:49

标签: android android-layout android-studio

我正在尝试制作我的第一个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" />

3 个答案:

答案 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_absoluteXtools:layout_editor_absoluteY属性,它们在编译的应用程序中没有实际效果。删除它们并尝试使用文本视图放置元素(由xml预览引导,而不是设计视图)。

如果您刚开始使用Android,我建议您尝试更简单的布局,例如RelativeLayout

答案 2 :(得分:1)

哟tmoran。 "RestartPolicy": { "Condition": "on-failure", "Delay": 10000000000, "MaxAttempts": 10 } 最近才成为ConstraintLayout的默认布局,如果不了解基础架构的工作原理,那就很难了。

Android Studiotools: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},它会带来好处。因为这将使将来更容易。

您需要先将第二行按钮约束到底部按钮,然后使用相同的想法将第一行按钮约束到第二行。