如何在线性布局中保持 TextView 为中心

Posted

技术标签:

【中文标题】如何在线性布局中保持 TextView 为中心【英文标题】:How to keep TextView as center inside linear layout 【发布时间】:2018-08-13 04:55:53 【问题描述】:

这是我的 xml 代码,我希望将中心 Textview 保持在包含 textview 和视图的线性布局内,但我希望文本视图在线性布局底部显示中心以查看,即按钮 textview 应该从顶部视图和底部居中linearLayout.

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/no_vouchers_view"
    android:layout_
    android:layout_>

<android.support.v7.widget.CardView
    android:id="@+id/xxlayout"
    android:layout_
    android:layout_
    android:layout_marginTop="@dimen/header_height"
    android:visibility="gone"
    tools:visibility="visible">

    <LinearLayout
        android:layout_
        android:layout_
        android:layout_margin="@dimen/margin_12"
        android:orientation="vertical">

        <TextView
            android:id="@+id/xxmessage"
            style="@style/Typeface.Body.TextMidGrey"
            android:layout_
            android:layout_
            android:lineSpacingExtra="@dimen/tfl_6"
            tools:text="KJGSAHJDGJKSGDASAGDHJGAS" />

        <View
            android:layout_
            android:layout_
            android:layout_marginTop="@dimen/margin_16"
            android:background="@color/text_light_grey" />
        <LinearLayout
            android:layout_
            android:layout_
            android:orientation="vertical">

            <TextView

                android:id="@+id/button"
                style="@style/Typeface.Body.Bold.White"
                android:layout_
                android:layout_
                android:layout_marginTop="@dimen/margin_16"
                android:paddingBottom="@dimen/padding_12"
                android:paddingTop="@dimen/padding_12"
                android:background="@drawable/welcome_screen_button_selector"
                android:layout_centerHorizontal="true"
                android:layout_gravity="center"
                android:gravity="center"
                android:text="@string/convert_points_to_vouchers"
                android:textAllCaps="false" />
        </LinearLayout>

    </LinearLayout>
</android.support.v7.widget.CardView>
</RelativeLayout>

【问题讨论】:

你能展示你需要的用户界面图片吗?看图比上百个字更容易理解。 How to center a textview inside a linearlayout的可能重复 我的问题是线性布局内部有视图,所以我在线性布局中保留了带有视图和底部布局的中心按钮 textview 【参考方案1】:

使用 android:layout_width="match_parent" & android:gravity="center" 你的TextView 会起作用的

使用这个

 <TextView
     android:id="@+id/xxmessage"
     style="@style/Typeface.Body.TextMidGrey"
     android:layout_
     android:gravity="center"
     android:layout_
     android:lineSpacingExtra="@dimen/tfl_6"
     tools:text="KJGSAHJDGJKSGDASAGDHJGAS" />

不是这个

<TextView
      android:id="@+id/xxmessage"
      style="@style/Typeface.Body.TextMidGrey"
      android:layout_
      android:layout_
      android:lineSpacingExtra="@dimen/tfl_6"
      tools:text="KJGSAHJDGJKSGDASAGDHJGAS" />

示例代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/no_vouchers_view"
    android:layout_
    android:layout_>

    <android.support.v7.widget.CardView
        android:id="@+id/xxlayout"
        android:layout_
        android:layout_
        android:layout_marginTop="@dimen/header_height"
        android:visibility="gone"
        tools:visibility="visible">

        <LinearLayout
            android:layout_
            android:layout_
            android:layout_margin="@dimen/margin_12"
            android:orientation="vertical">

            <TextView
                android:id="@+id/xxmessage"
                style="@style/Typeface.Body.TextMidGrey"
                android:layout_
                android:gravity="center"
                android:layout_
                android:lineSpacingExtra="@dimen/tfl_6"
                tools:text="KJGSAHJDGJKSGDASAGDHJGAS" />

            <View
                android:layout_
                android:layout_
                android:layout_marginTop="@dimen/margin_16"
                android:background="@color/text_light_grey" />
            <LinearLayout
                android:layout_
                android:layout_
                android:gravity="center"
                android:orientation="vertical">

                <TextView    
                    android:id="@+id/button"
                    style="@style/Typeface.Body.Bold.White"
                    android:layout_
                    android:layout_
                    android:layout_marginTop="@dimen/margin_16"
                    android:paddingBottom="@dimen/padding_12"
                    android:paddingTop="@dimen/padding_12"
                    android:background="@drawable/welcome_screen_button_selector"
                    android:layout_centerHorizontal="true"
                    android:layout_gravity="center"
                    android:gravity="center"
                    android:text="@string/convert_points_to_vouchers"
                    android:textAllCaps="false" />
            </LinearLayout>

        </LinearLayout>
    </android.support.v7.widget.CardView>
</RelativeLayout>

【讨论】:

我不是在谈论 xxxmessage 我在谈论按钮 textview @Nilesh Rathod 从视图中仍然可以看到它在按钮和视图之间需要更多的间隙 LinearLayout中删除android:layout_margin="@dimen/margin_12" 如果我要删除,那么上面的文本视图将设置为向上 @AnilThakur 用当前输出和预期输出更新您的问题【参考方案2】:

试试这个 android:layout_gravity="center"

  <TextView
            android:id="@+id/xxmessage"
            style="@style/Typeface.Body.TextMidGrey"
            android:layout_
            android:layout_
            android:layout_gravity="center"
            android:lineSpacingExtra="@dimen/tfl_6"
            tools:text="KJGSAHJDGJKSGDASAGDHJGAS" />

【讨论】:

【参考方案3】:

在 android 中创建嵌套布局会导致各种 performance issues。 我建议你使用 ConstraintLayout 而不是线性布局。 ConstraintLayout 有助于构建响应式 UI。 使用ConstraintLayout,您可以easily drag/drop any element 并根据您的活动限制它们。

【讨论】:

我不必使用 ConstraintLayout。

以上是关于如何在线性布局中保持 TextView 为中心的主要内容,如果未能解决你的问题,请参考以下文章

如何在线性布局中对齐按钮(viewpager 点指示器)

如何在线性布局的一侧绘制边框?

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

在线性布局中对齐元素

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

如何在 TextView 自己的容器中居中文本?