具有一行而不是两行文本的线性布局中按钮的奇怪行为

Odd behavior of button in linear layout that has one line of text instead of two

我有一个 linear layout 包裹在 HorizontalScrollView 中。除了布局中的一个按钮高于其余按钮外,一切似乎都运行良好。

这个按钮看起来比其他按钮高的原因是它只有一行而不是两行文本。

问题截图如下:

虽然布局用于键盘服务,但我认为这不是问题,因为在 XML 布局文件的设计选项卡中仍然会出现此问题。

这里是整个服务的布局代码:

 <?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">

    <HorizontalScrollView
    android:layout_width="match_parent"
    android:layout_height="50dp">

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="50dp"
    android:id="@+id/tablayout">


    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="What did you say?!"
        android:id="@+id/T_YouSay"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="I identify as a..."
        android:id="@+id/T_Identify"
        android:textSize="12sp"
        android:textAllCaps="false"/>


//This button is the one that is higher then the rest. Notice how
//it is only one line of text instead of two.
    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="That's some..."
        android:id="@+id/Thats_some"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Here's the thing..."
        android:id="@+id/theThing"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="Other copypastas"
        android:id="@+id/tab_Misc"
        android:textSize="12sp"
        android:textAllCaps="false"/>


</LinearLayout>

</HorizontalScrollView>

那么,为什么在这个 Linear Layout 包裹在 HorizontalScrollView 中的只有一行文本的按钮比其他按钮高,我该如何解决它?

添加

android:baselineAligned="false"

到包含按钮 (id == tabLayout) 的 LinearLayout。

简单易行的解决方案是将重力属性添加到@id/tablayout的LinearLayout。

android:重力="center_vertical"

您可以使用权重为您的按钮分配相等的 space。硬编码宽度可能不是一个好主意,因为您的按钮将无法利用大屏幕和横向模式。这是您的布局的增强版。

<LinearLayout
    android:weightSum="5"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:id="@+id/tablayout">


    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:text="What did you say?!"
        android:id="@+id/T_YouSay"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:text="I identify as a..."
        android:id="@+id/T_Identify"
        android:textSize="12sp"
        android:textAllCaps="false"/>


//This button is the one that is higher then the rest. Notice how
//it is only one line of text instead of two.
    <Button
         android:layout_weight="1"
         android:layout_width="0dp"
        android:layout_height="50dp"
        android:text="That's some..."
        android:id="@+id/Thats_some"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
         android:layout_width="0dp"
         android:layout_weight="1"
        android:layout_height="50dp"
        android:text="Here's the thing..."
        android:id="@+id/theThing"
        android:textSize="12sp"
        android:textAllCaps="false"/>

    <Button
         android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:text="Other copypastas"
        android:id="@+id/tab_Misc"
        android:textSize="12sp"
        android:textAllCaps="false"/>

</LinearLayout>

</LinearLayout>

结果