layout_above坏了吗?这个简单的布局让我发疯
Is layout_above broken? this simple layout is driving me crazy
这是我的代码
<TextView
android:id="@+id/BIG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BIG"
android:textSize="50dp" />
<TextView
android:id="@+id/small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/BIG"
android:layout_toRightOf="@id/BIG"
android:text="small"
android:textSize="10dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/small"
android:layout_alignLeft="@id/small"
android:text="small above"
android:textSize="10dp" />
这是我得到的结果(实际截图)。如您所见,整个文本视图已消失。
这是我想要的结果(在mspaint上编辑)
由于自动填充,我无法使用 align_bottom。这是如果我使用 align_bottom 而不是 align_Baseline 的样子(实际截图)
显然,基线对齐是在所有其他垂直对齐都已执行之后执行的。
所以“小上面”排在“小”上面的时候还在默认位置。然后,“small”与 “BIG” 的基线对齐,将“small above”留在视图之外,位于 RelativeLayout 的顶部。
此问题的一个潜在解决方案是将两个较小的 TextView 包装在一个 LinearLayout 中,然后可以将其与左侧较大的 TextView 正确基线对齐。
并且还将 android:baselineAlignedChildIndex="1" 添加到 LinearLayout,以便第二个 child 的基线与 "BIG" 对齐
参考:http://scottweber.com/2014/02/06/working-with-baselines-in-relativelayout/
试试这个:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/BIG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BIg"
android:textSize="50sp"
android:layout_gravity="bottom" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="bottom">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="small above"
android:textSize="10sp" />
<TextView
android:id="@+id/small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="small"
android:textSize="10sp" />
</LinearLayout>
并使用 sp 而不是 dp 作为文本大小。
这是我的代码
<TextView
android:id="@+id/BIG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BIG"
android:textSize="50dp" />
<TextView
android:id="@+id/small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBaseline="@id/BIG"
android:layout_toRightOf="@id/BIG"
android:text="small"
android:textSize="10dp"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@id/small"
android:layout_alignLeft="@id/small"
android:text="small above"
android:textSize="10dp" />
这是我得到的结果(实际截图)。如您所见,整个文本视图已消失。
这是我想要的结果(在mspaint上编辑)
由于自动填充,我无法使用 align_bottom。这是如果我使用 align_bottom 而不是 align_Baseline 的样子(实际截图)
显然,基线对齐是在所有其他垂直对齐都已执行之后执行的。
所以“小上面”排在“小”上面的时候还在默认位置。然后,“small”与 “BIG” 的基线对齐,将“small above”留在视图之外,位于 RelativeLayout 的顶部。
此问题的一个潜在解决方案是将两个较小的 TextView 包装在一个 LinearLayout 中,然后可以将其与左侧较大的 TextView 正确基线对齐。
并且还将 android:baselineAlignedChildIndex="1" 添加到 LinearLayout,以便第二个 child 的基线与 "BIG" 对齐
参考:http://scottweber.com/2014/02/06/working-with-baselines-in-relativelayout/
试试这个:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/BIG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="BIg"
android:textSize="50sp"
android:layout_gravity="bottom" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="bottom">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="small above"
android:textSize="10sp" />
<TextView
android:id="@+id/small"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="small"
android:textSize="10sp" />
</LinearLayout>
并使用 sp 而不是 dp 作为文本大小。