设置两个LinearLayouts,对齐一个在buttom,另一个在屏幕的其余部分居中

时间:2018-01-14 09:58:28

标签: android-layout xamarin xamarin.android

我对android设计很新,并且设置了一些基本问题 简单的布局:

以下是我的目标:

  • 我想在屏幕的末尾有两个按钮,每个按钮都有相同的尺寸,填满了屏幕的宽度。
  • 第二个LinearLayout应填充屏幕的其余部分,但其所有内容应垂直居中。

我尽我所能,但有时我的底部LinearLayout完全消失,有时底部看起来很好,但其他布局内容不是居中。我只是不知道该尝试什么。这是我到目前为止所得到的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:orientation="vertical"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_gravity="center">
    <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:id="@+id/editTableName"
      android:hint="@string/TableNameHint" />
    <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:id="@+id/editTableDescripion"
      android:hint="@string/TableDescriptionHint" />
    <EditText
      android:inputType="textPassword"
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:hint="@string/TablePasswordHint"
      android:id="@+id/TablePassword"
      android:fontFamily="sans-serif" />
  </LinearLayout>
  <LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom">
    <Button
      android:id="@+id/BtnAddTable"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="@string/BtnAddTable" />
    <Button
      android:id="@+id/BtnCancelAddTable"
      android:layout_width="0dp"
      android:layout_height="wrap_content"
      android:layout_weight="1"
      android:text="@string/BtnCancelAddTable"
      />
  </LinearLayout>
</LinearLayout>

2 个答案:

答案 0 :(得分:1)

  

我尽我所能,但有时我的底部LinearLayout完全消失,有时底部看起来很好,但其他布局内容不是居中。

您的按钮有时会消失,因为您的顶部子线性布局高度为match_parent,这使得它填充父级的高度并覆盖以下视图。

您需要的是如下布局结构: enter image description here

说明

与图片中的说明一样,您可以将 weightsum 设置为您的父版面,并将权重百分比设置为您的子版面。并使用Linearlayout包裹您的按钮Relativelayout,以便您可以将按钮置于中心位置。

代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="4">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:layout_gravity="center">
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
           android:layout_gravity="center"
            android:id="@+id/editTableName"
            android:hint="@string/TableNameHint" />
        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:id="@+id/editTableDescripion"
            android:hint="@string/TableDescriptionHint" />
        <EditText
            android:inputType="textPassword"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:hint="@string/TablePasswordHint"
            android:id="@+id/TablePassword"
            android:fontFamily="sans-serif" />
    </LinearLayout>
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="3">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_gravity="bottom">
            <Button
                android:id="@+id/BtnAddTable"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/BtnAddTable" />
            <Button
                android:id="@+id/BtnCancelAddTable"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="@string/BtnCancelAddTable" />
        </LinearLayout>
    </RelativeLayout>
</LinearLayout>

<强>更新

RelativeLayout有限制,只能包含一个孩子。因此,如果您想在底部区域添加更多小部件,那么最适合您的方法是使用ConstraintLayout

对于Xamarin,您可以按照以下步骤操作:

  1. 在VS中打开Android SDK Manager:
  2. enter image description here

    1. 工具 - &gt;其他 - &gt;检查以下版本的Constraintlayout和Android解算器,如下所示并应用更改:
    2. enter image description here

      1. 通过nuget package安装Xamrin.Android.Support.Constraint.Layout到您的项目:
      2. enter image description here

        1. 然后使用以下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"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
            <EditText
                android:id="@+id/editText"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Name" />
          
            <EditText
                android:id="@+id/editText2"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Name"
                app:layout_constraintTop_toBottomOf="@+id/editText" />
          
            <EditText
                android:id="@+id/editText3"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toBottomOf="@+id/editText2" />
          
            <android.support.constraint.Guideline
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/guideline"
                app:layout_constraintGuide_percent="0.6"
                android:orientation="horizontal"/>
            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintBottom_toBottomOf="@id/guideline"
                android:orientation="horizontal">
            <Button
                android:id="@+id/button"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Button"/>
            <Button
                android:id="@+id/button2"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="Button"/>
            </LinearLayout>
          </android.support.constraint.ConstraintLayout>
          
        2. 简短说明: 使用android.support.constraint.Guidelineapp:layout_constraintGuide_percent="0.6"一起绘制一条不可见的线来帮助定位按钮。(指南将是顶部屏幕的60%)。然后让按钮&#39; stacklayout是指南的底部。

          有关ConstraintLayout的详细用法,请参阅Build responsive UI with ConstraintLayout

答案 1 :(得分:0)

嗯,你想要做的就是通过在混合中添加一个相对布局来实现:

你需要做的是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="match_parent">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical"
 android:layout_width="match_parent"
 android:layout_height="0dp"
 android:layout_weight="6"
 android:layout_gravity="center">
<EditText
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:id="@+id/editTableName"
  android:hint="@string/TableNameHint" />
<EditText
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:id="@+id/editTableDescripion"
  android:hint="@string/TableDescriptionHint" />
<EditText
  android:inputType="textPassword"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_gravity="center"
  android:hint="@string/TablePasswordHint"
  android:id="@+id/TablePassword"
  android:fontFamily="sans-serif" />
</LinearLayout>
<RelativeLayout
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
 android:layout_alignParentBottom="true">
<LinearLayout
 android:orientation="horizontal"
 android:layout_width="match_parent"
 android:layout_height="wrap_content"
>
<Button
  android:id="@+id/BtnAddTable"
  android:layout_width="0dp"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:text="@string/BtnAddTable" />
<Button
  android:id="@+id/BtnCancelAddTable"
  android:layout_width="0dp"
  android:layout_height="wrap_content"
  android:layout_weight="1"
  android:text="@string/BtnCancelAddTable"
  />
 </LinearLayout>
 </RelativeLayout>
 </LinearLayout>

<强> RelativeLayout的:

官方Android开发者网站说:

  

RelativeLayout是一个视图组,用于显示相对位置的子视图。每个视图的位置可以指定为相对于同级元素(例如,在另一个视图的左侧或下方)或相对于父级RelativeLayout区域的位置(例如与底部,左侧或中间对齐)。