我一直在为一个非常简单的任务而与Android作战,无法终生解决。我尝试了LinearLayout
,RelativeLayout
,并给了ContraintLayout
一事无成。
简化后,我想要具有两个元素的水平布局:
+-----------------------+-------+
| Hello | World |
+-----------------------+-------+
每个元素本身都会是一个布局。就本示例而言,每个布局都将包含一个TextView
。包含TextView
“世界”的元素应为100dp宽。包含TextView
“ Hello”的元素应与父级的宽度匹配,但不能与“ World”重叠。基本上是“在尊重其他要素的同时,尽可能地广泛”。
我当前的尝试是:
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_orientation="horizontal"
android:layout_gravity="center">
<FrameLayout
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_dark">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Hello"
android:textColor="#ffffff"
android:textSize="32sp" />
</FrameLayout>
<LinearLayout
android:id="@+id/settings_bar"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark"
android:orientation="vertical"
android:layout_toRightOf="@+id/main_frame"
android:layout_alignParentRight="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="World"/>
</LinearLayout>
</RelativeLayout>
答案 0 :(得分:2)
我保留了您的布局。试试这个:
<RelativeLayout xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_orientation="horizontal"
android:layout_gravity="center">
<FrameLayout
android:id="@+id/main_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentStart="true"
android:layout_marginEnd="100dp"
android:background="@android:color/holo_orange_dark">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="center"
android:text="Hello"
android:textColor="#ffffff"
android:textSize="32sp" />
</FrameLayout>
<LinearLayout
android:id="@+id/settings_bar"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="@android:color/holo_green_dark"
android:orientation="vertical"
android:layout_alignParentEnd="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:paddingTop="10dp"
android:text="World"/>
</LinearLayout>
</RelativeLayout>
我删除了
android:layout_toRightOf="@+id/main_frame"
来自settings_bar
。
我添加了
android:layout_alignParentStart="true"
到main_frame
答案 1 :(得分:0)
您可以使用layout_weight
的{{1}}属性来实现这种功能
textview
答案 2 :(得分:0)
这是一个非常简单的布局,可以使用constraintLayout
轻松实现。我不包括您用作包装程序的FrameLayout
和LinearLayout
。您可以将它们添加为宽度和高度与TextView
相同的包装器,这不会影响布局。在这里-
<androidx.constraintlayout.widget.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"
android:orientation="vertical">
<TextView
android:id="@+id/hello"
android:layout_width="0dp"
android:layout_height="match_parent"
android:background="@android:color/holo_orange_light"
android:gravity="center"
android:text="Hello"
android:textSize="25sp"
app:layout_constraintEnd_toStartOf="@id/world"
app:layout_constraintStart_toStartOf="parent" />
<TextView
android:id="@+id/world"
android:layout_width="100dp"
android:layout_height="match_parent"
android:background="@android:color/holo_purple"
android:gravity="center"
android:text="World"
android:textSize="25sp"
app:layout_constraintEnd_toEndOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
当您为第二个布局(“世界”)设置app:layout_constraintEnd_toEndOf="parent"
时,它将使布局与结尾对齐(右)。我已使用android:layout_width="100dp"
设置了其自定义宽度。
对于第一种布局(“ Hello”),您将使用
app:layout_constraintEnd_toStartOf="@id/world"
app:layout_constraintStart_toStartOf="parent"
与android:layout_width="0dp"
。 0dp实际上不会将宽度设置为0,但会使其在其约束之间伸展。因此,在这种情况下,它将开始的位置(左)设置为父级的开始,并将结束的位置设置为第二版式的开始(左)。因此,它将一直延伸到该布局。
这是它的样子-