如何在线性布局中居中文本视图

Posted

技术标签:

【中文标题】如何在线性布局中居中文本视图【英文标题】:how to center a textview in linearlayout 【发布时间】:2013-10-24 13:22:22 【问题描述】:

我在 xml 中有以下视图。我在顶部有一个文本视图,它是一个横幅。然后我有一个包含消息的列表视图和另一个包含字符串“没有消息”的文本视图。

在运行时,我检查数据库中是否有任何消息。如果没有,那么我隐藏列表视图并显示 textviewnomessages。

我希望 textviewnomessages 在视图的中心,而不是在横幅下方。我如何指定 textviewnomessages 位于屏幕的中心。谢谢

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_
    android:layout_
    android:background="@drawable/carefreebgscaled"

    android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
        android:id="@+id/textviewmessageslabel"
        android:layout_
        android:layout_
        android:gravity="center"
        android:background="@color/blue_alpha_background"
        android:text="Messages"
         android:textColor="#FFFFFF"
        android:textAppearance="?android:attr/textAppearanceLarge" />



    <ListView
        android:id="@+id/listviewmessages"
        android:layout_
        android:layout_
        android:background="#ccffffff"
        android:cacheColorHint="#0000"
        android:padding="5dp" >

    </ListView>

    <TextView
    android:id="@+id/textviewnomessageslabel"
    android:layout_
    android:layout_
    android:text="You have no messages."
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#0000FF" />

</LinearLayout>

.[编辑 1]

<?xml version="1.0" encoding="utf-8"?>

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_
    android:layout_
    android:background="@drawable/carefreebgscaled" >

<TextView
        android:id="@+id/textviewmessageslabel"
        android:layout_
        android:layout_
        android:gravity="center"
        android:background="@color/blue_alpha_background"
        android:text="Messages"
         android:textColor="#FFFFFF"
        android:textAppearance="?android:attr/textAppearanceLarge" />



    <ListView
        android:id="@+id/listviewmessages"
        android:layout_
        android:layout_
        android:background="#ccffffff"
        android:cacheColorHint="#0000"
        android:padding="5dp" >

    </ListView>

    <TextView
    android:id="@+id/textviewnomessageslabel"
    android:layout_
    android:layout_
    android:text="You have no messages."
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#0000FF"
    android:layout_centerInParent="true" />

</RelativeLayout>

【问题讨论】:

【参考方案1】:

好的,根据您在编辑中所做的更改,如果您将相关文本视图设置为 layout_width 和 layout_height 的“wrap_content”,它应该可以按预期工作。

<TextView
    android:id="@+id/textviewnomessageslabel"
    android:layout_
    android:layout_
    android:text="You have no messages."
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#0000FF"
    android:layout_centerInParent="true" />

您还应该将列表视图设置在顶部文本视图下方,如下所示:

<ListView
    android:id="@+id/listviewmessages"
    android:layout_
    android:layout_
    android:layout_below="@id/textviewmessageslabel"
    android:background="#ccffffff"
    android:cacheColorHint="#0000"
    android:padding="5dp" >

</ListView>

【讨论】:

【参考方案2】:

您可以在运行时使用setvisibility() 设置TextView 的可见性。

【讨论】:

【参考方案3】:

使用

android:layout_
android:layout_
android:gravity="center"

【讨论】:

【参考方案4】:

您可以通过将高度更改为“fill_parent”来做到这一点:

<TextView
    android:id="@+id/textviewnomessageslabel"
    android:layout_
    android:layout_
    android:text="You have no messages."
    android:gravity="center"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#0000FF" />

或者通过将他的父级更改为 RelativeLayout 并使用:

android:layout_centerInParent="true

[编辑1]

使用相对布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_
                android:layout_>

    <TextView
            android:id="@+id/textviewmessageslabel"
            android:layout_
            android:layout_
            android:gravity="center"
            android:text="Messages"
            android:textColor="#FFFFFF"
            android:textAppearance="?android:attr/textAppearanceLarge" />



    <ListView
            android:id="@+id/listviewmessages"
            android:layout_
            android:layout_
            android:background="#ccffffff"
            android:layout_below="@id/textviewmessageslabel"
            android:cacheColorHint="#0000"
            android:padding="5dp" >

    </ListView>

    <TextView
            android:id="@+id/textviewnomessageslabel"
            android:layout_
            android:layout_
            android:text="You have no messages."
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#0000FF"
            android:gravity="center"
            android:layout_centerInParent="true" />

</RelativeLayout>

【讨论】:

第二个文本视图现在位于横幅顶部。编辑 1 是我现在所拥有的。如何将第二个 textview 设置为屏幕中心【参考方案5】:

将“android:gravity="center"”添加到您的 TextView

【讨论】:

【参考方案6】:

尝试将您的 TextView 作为直接父级放入 RelativeLayout:

  <?xml version="1.0" encoding="utf-8"?>
<LinearLayout android:layout_
    android:layout_
    android:background="@drawable/carefreebgscaled"

    android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android">

<TextView
        android:id="@+id/textviewmessageslabel"
        android:layout_
        android:layout_
        android:gravity="center"
        android:background="@color/blue_alpha_background"
        android:text="Messages"
         android:textColor="#FFFFFF"
        android:textAppearance="?android:attr/textAppearanceLarge" />



    <ListView
        android:id="@+id/listviewmessages"
        android:layout_
        android:layout_
        android:background="#ccffffff"
        android:cacheColorHint="#0000"
        android:padding="5dp" >

    </ListView>

    <RelativeLayout
        android:layout_
        android:layout_>

        <TextView
            android:id="@+id/textviewnomessageslabel"
            android:layout_
            android:layout_
            android:text="You have no messages."
            android:textAppearance="?android:attr/textAppearanceLarge"
            android:textColor="#0000FF"
            android:layout_alignParentBottom="true"
            android:layout_alignParentStart="true"
            android:layout_marginBottom="211dp"
            android:gravity="center"/>
    </RelativeLayout>

</LinearLayout>

【讨论】:

以上是关于如何在线性布局中居中文本视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在线性布局中居中内容?

将两个项目限制在线性布局内的顶部和底部

ImageView 未在滚动视图内的线性布局中显示

在线性布局中对齐元素

线性布局android中的重叠视图

Imageview 在线性布局中不可见