在对齐线下带有多行文本的按钮,如何解决?

Posted

技术标签:

【中文标题】在对齐线下带有多行文本的按钮,如何解决?【英文标题】:Buttons with multiline text sink under alignment line, how to fix it? 【发布时间】:2012-02-26 02:33:39 【问题描述】:

我看到简单按钮的奇怪行为,当它们的文本分成几行时。我有它在更复杂的情况下,但即使在最简单的情况下也会发生。使用这种布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_ android:layout_>

<Button android:layout_ android:layout_ android:text="111" />
<Button android:layout_ android:layout_ android:text="111 222 333" />
<Button android:layout_ android:layout_ android:text="111 222 333 444 555 666" />
<Button android:layout_ android:layout_ android:text="111" />
</LinearLayout>

结果是:

每下一行文本,按钮都会上下移动。我要他们排成一行。这是一个 android 错误吗?如何修复它?

【问题讨论】:

这不是错误,按钮的文本基线与其他按钮对齐。将baselineAligned 设置为falseLinearLayout 将解决此问题。 【参考方案1】:

像这样代替按钮使用

<Button 
    android:layout_ 
    android:layout_ 
    android:layout_weight="1" 
    android:text="111" />

【讨论】:

我希望这些按钮大小相同。实际上我在我的真实程序中使用了 android:layout_weight="1" 和 android:layout_ ,但这并没有帮助。【参考方案2】:

试试这个:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:orientation="vertical" >

    <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal" >

        <Button
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:text="111" />

        <Button
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:text="111 222 333" />

        <Button
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:text="111 222 333 444 555 666" />

        <Button
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:text="111" />
    </LinearLayout>

</LinearLayout>

【讨论】:

+1。谢谢!实际上,按钮的 android:layout_gravity="center" 似乎就足够了,不需要嵌套活动。我会再等几个小时等待其他意见,但您的回答可能会得到分数。 android:gravity="center" 作为布局属性也可以工作,还有一些其他条件,例如: 【参考方案3】:

在每个按钮中使用以下 2 行,然后所有按钮将出现在单行中。

    android:layout_ 
    android:layout_ 

如果您希望这些按钮必须拉伸整个宽度,请将下面的行也添加到每个按钮

    android:layout_weight="1" 

【讨论】:

我知道“wrap_content”的作用,但我想要大小相同的按钮。【参考方案4】:

做这样的事情

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_ >

<Button
    android:id="@+id/btn1"
    android:layout_
    android:layout_
    android:text="111" />

<Button
    android:layout_toRightOf="@+id/btn1"
    android:id="@+id/btn2"
    android:layout_
    android:layout_
    android:text="111 222 333" />

<Button
    android:layout_toRightOf="@+id/btn2"
    android:id="@+id/btn3"
    android:layout_
    android:layout_
    android:text="111 222 333 444 555 666" />

<Button
           android:layout_toRightOf="@+id/btn3"
    android:id="@+id/btn4"
    android:layout_
    android:layout_
    android:text="111" />

</RelativeLayout>

【讨论】:

+1。这可行,但来自 dmytrodanylyk 解决方案的 android:layout_gravity="center" 更简单。【参考方案5】:

设置LinearLayout的android:baselineAlignedfalse

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_ android:layout_
android:baselineAligned="false">

【讨论】:

以上是关于在对齐线下带有多行文本的按钮,如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

如何从控制台读取多行文本,然后将内容保存到带有换行符的文件中?

带有图标的按钮中文本的垂直对齐方式不正确

垂直对齐带有包装文本的按钮,并排

R:带多行文字的直方图字幕:如何在列中获得表格对齐?

CSS:在单选按钮后对齐多行文本

Shell脚本编程小技巧-如何解决脚本中多行重定向结束符不用对齐到行首