【问题标题】:How to keep a TextView center aligned within a RelativeLayout with mutliple TextViews如何在具有多个 TextView 的相对布局中保持 TextView 中心对齐
【发布时间】:2018-03-08 11:02:50
【问题描述】:

我有这个RelativeLayout 与两个TextViews,一个与center 对齐,另一个与end 对齐,

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="60dp"
                android:layout_marginEnd="@dimen/size_10dp"
                android:layout_marginStart="@dimen/size_10dp">

                <TextView
                    android:id="@+id/title_count_text"
                    fontPath="fonts/title_bold.ttf"
                    android:layout_width="wrap_content"
                    android:layout_height="60dp"
                    android:layout_alignParentEnd="true"
                    android:layout_gravity="center"
                    android:background="@color/background"
                    android:ellipsize="end"
                    android:gravity="center|center_vertical"
                    android:maxLines="1"
                    android:text="(0)"
                    android:paddingLeft="@dimen/size_5dp"
                    android:paddingStart="@dimen/size_5dp"
                    android:textColor="@color/textColorGrey"
                    android:textSize="@dimen/size_18dp"
                    android:textStyle="bold" />

                <TextView
                    android:id="@+id/title_text"
                    fontPath="fonts/title_bold.ttf"
                    android:layout_width="wrap_content"
                    android:layout_height="60dp"
                    android:layout_centerInParent="true"
                    android:layout_gravity="center"
                    android:ellipsize="end"
                    android:gravity="center"
                    android:maxLines="1"
                    android:text="This is a Sample Test"
                    android:textAlignment="center"
                    android:textColor="@color/textColorGrey"
                    android:textSize="@dimen/size_18dp"
                    android:textStyle="bold" />

            </RelativeLayout> 

看起来像这样,请在下面找到图片,

它在文本长度较小的情况下工作正常,但如果我增加文本长度它将与计数器文本重叠,显然title_text 是在title_count_text 之后呈现的,

但是,如果我将 android:layout_toLeftOf="@+id/title_count_text" 属性添加到 title_text 并更改宽度以匹配父级以使此 TextView 中心对齐。 title_text 将失去重心。

看起来像这样,请在下面找到第二个附件

虽然它可能不可见,但它现在向左移动了大约计数器文本的宽度,

我想要实现的是保留title_text 的中心对齐方式,并且当文本长度较大并且到达计数器文本视图的开头时,它应该剪切文本并将... 附加到末尾,

我们将不胜感激任何形式的帮助,

谢谢

TL:DR 不仅居中对齐,还需要在遇到计数器文本视图时进行剪辑,如果文本长度较大。

【问题讨论】:

  • 使用线性布局并将权重 1 赋予第一个文本视图,最大行数 1
  • @Redman 是对的!不需要使用相对布局,你只需要使用 liner 布局并使用它的 weight 属性,你可以让你的 textview 居中。
  • @Redman 你能把它作为答案发布吗,
  • 您希望“这是一个示例文本”文本居中对齐?
  • 是的@Ankita,不仅居中对齐,还需要在遇到计数器文本视图时进行剪辑,如果文本长度更大。

标签: android android-layout textview android-relativelayout layout-gravity


【解决方案1】:

如果您愿意,可以删除您的相对布局的内边距,并为title_text Textview添加内边距

 <RelativeLayout
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    >

    <TextView
        android:id="@+id/title_count_text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_alignParentEnd="true"
        android:layout_gravity="center"
        android:ellipsize="end"
        android:gravity="center|center_vertical"
        android:maxLines="1"
        android:text="(0)"
        android:paddingLeft="@dimen/size_5dp"
        android:paddingStart="@dimen/size_5dp"
        android:textColor="@color/textColorGrey"
        android:textSize="@dimen/size_18dp"
        android:textStyle="bold" />

    <TextView
        android:id="@+id/title_text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:padding="16dp"
        android:layout_centerInParent="true"
        android:layout_gravity="center"
        android:ellipsize="end"
        android:gravity="center"
        android:maxLines="1"
        android:text="This is a Sample Test wehatb the  are u dongibng wjkl"
        android:textAlignment="center"
        android:textColor="@color/textColorGrey"
        android:textSize="@dimen/size_18dp"
        android:textStyle="bold" />

</RelativeLayout>

【讨论】:

  • 终于yyyy!!...你用了什么魔法?大声笑:D 在过去的 5 个小时里一直在拉我的头发。谢谢朋友。
  • @Sanoop 我只是想解决你的问题
【解决方案2】:
<TextView
                android:id="@+id/title_text"
                android:layout_toLeftOf="@+id/title_count_text"
                android:layout_alignParentLeft="true"
                fontPath="fonts/title_bold.ttf"
                android:layout_width="wrap_content"
                android:layout_height="60dp"
                android:layout_centerInParent="true"
                android:layout_gravity="center"
                android:ellipsize="end"
                android:gravity="center"
                android:maxLines="1"
                android:text="This is a Sample Test"
                android:textAlignment="center"
                android:textColor="@color/textColorGrey"
                android:textSize="@dimen/size_18dp"
                android:textStyle="bold" />

我在您的第二个文本视图中添加了以下两行以获得您描述的行为:

android:layout_toLeftOf="@+id/title_count_text"
android:layout_alignParentLeft="true"

不过,您可能不得不尝试使用椭圆大小设置。

【讨论】:

  • 是的.. 完全正确.. 如何使椭圆大小起作用.. 这是终极问题.. :(
【解决方案3】:

正如我在上面的评论中提到的,使用LinearLayout,宽度matchparent,方向horizontal。 内部线性布局采用 2 个文本视图,第一个 TextView 宽度 0dp 和重量 1,第二个 TextView 宽度环绕内容

【讨论】:

  • 累了还是一样,第一个textView还是左移,
  • @Sanoop 如果你想让 ellipsize 工作,请在 xml 属性中使用 android:inputType="text"
  • 不,看不出有什么不同。 :(
【解决方案4】:

更新title_text如下:

               <TextView
                android:id="@+id/title_text"
                fontPath="fonts/title_bold.ttf"
                android:layout_width="match_parent"
                android:layout_toLeftOf="@+id/title_count_text"
                android:ellipsize="end"
                android:layout_height="60dp"
                android:gravity="center"
                android:maxLines="1"
                android:text="This is a Sample Test"
                android:textColor="@color/textColorGrey"
                android:textSize="@dimen/size_18dp"
                android:textStyle="bold" />

主要添加以下3个属性:

                    android:layout_width="match_parent"
                    android:layout_toLeftOf="@+id/title_count_text"
                    android:ellipsize="end"

另外,删除:

                android:layout_centerInParent="true"
                android:layout_gravity="center"

【讨论】:

    【解决方案5】:

    试试这个:-

    <?xml version="1.0" encoding="utf-8"?>
    
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="60dp"
            android:layout_marginEnd="@dimen/size_10dp"
            android:layout_marginStart="@dimen/size_10dp">
    
            <TextView
                android:id="@+id/title_count_text"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:background="@color/background"
                android:textAlignment="center"
                android:ellipsize="end"
                android:maxLines="1"
                android:gravity="center"
                android:text="(0)"
                android:paddingLeft="@dimen/size_5dp"
                android:paddingStart="@dimen/size_5dp"
                android:textColor="@color/textColorGrey"
                android:textSize="@dimen/size_18dp"
                android:textStyle="bold" />
    
            <TextView
                android:id="@+id/title_text"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:ellipsize="end"
                android:layout_gravity="end"
                android:maxLines="1"
                android:gravity="center"
                android:text="This is a Sample Test"
                android:textAlignment="center"
                android:textColor="@color/textColorGrey"
                android:textSize="@dimen/size_18dp"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>
    

    【讨论】:

    • Noo.. @Ankita aa .. 它不起作用,这基本上是做什么的,我为两个 textViews 分配了分配的空间,它不会剪辑 textview。 :( :( 感谢您的努力。
    【解决方案6】:

    试试这个,然后告诉我,

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:background="#ff0000"
        android:weightSum="1"
        >
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.8"
            android:text="test"
            android:gravity="center"/>
    
        <TextView
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.2"
            android:text="0"
            android:gravity="center"/>
    
    </LinearLayout>
    

    【讨论】:

    • 投反对票!你能在应用解决方案之前评论原因吗?不要在没有应用你的逻辑的情况下投反对票..
    • Nop 不起作用@Radhey 已经尝试过了,但文本长度更大,title_Text 没有剪裁。
    • 将 android:singleLine="true" 添加到文本视图中。
    • 感谢您的努力,非常感谢,有很多用户的议程是降级和自我提升。 +1为您的努力!快乐编码..
    【解决方案7】:

    试试这个:-

    将 android:layout_toStartOf="@+id/title_count_text" 和 android:maxLines="2" 添加到 ID 为 "@+id/title_text" 的 TextView。它对我有用。

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="60dp"
    android:layout_marginEnd="@dimen/dp10"
    android:layout_marginStart="@dimen/dp10">
    
    <TextView
        android:id="@+id/title_count_text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_alignParentEnd="true"
        android:ellipsize="end"
        android:gravity="center|center_vertical"
        android:maxLines="1"
        android:paddingLeft="@dimen/dp5"
        android:paddingStart="@dimen/dp5"
        android:text="(0)"
        android:textSize="@dimen/dp18"
        android:textStyle="bold" />
    
    <TextView
        android:id="@+id/title_text"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:layout_gravity="center"
        android:layout_toStartOf="@+id/title_count_text"
        android:gravity="center"
        android:maxLines="2"
        android:text="This is a Sample Test This is a Sample Test This is a Sample Test This is a Sample Test"
        android:textAlignment="center"
        android:textSize="@dimen/dp18" />
    
    </RelativeLayout>
    

    【讨论】:

      猜你喜欢
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多