【问题标题】:Android: TextView word-wrap with shortest line firstAndroid:TextView自动换行,最短行优先
【发布时间】:2013-09-30 09:46:07
【问题描述】:

对于图形横幅,我将两个 TextViews 放在一起。

顶部TextView 与底部对齐,底部与顶部对齐,因此文本始终位于同一中心。 TextViews 在布局中看起来像这样:

<LinearLayout
    android:layout_height="match_parent"
    android:layout_width="fill_parent"
    android:paddingLeft="126dp"
    android:paddingRight="10dp"
    android:orientation="vertical">
    <TextView
        android:id="@+id/title"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:maxLines="2"
        android:gravity="bottom|left"
        android:textColor="#FFFFFF"
        android:textStyle="bold"
        android:textSize="16sp" />
    <TextView
        android:id="@+id/artist"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:maxLines="2"
        android:gravity="top|left"
        android:textColor="#AAAAAA"
        android:textSize="16sp" />
</LinearLayout>

我的问题是,当顶部TextView 换行时,换行以最后一行作为最小行,并且没有考虑到我与底部对齐。见下文。

我会预料到重力会使文本换行以一种使大部分文本位于底线的方式发生。

关于如何让TextView 以最后一行优先方式执行自动换行的任何建议?

感谢阅读!

【问题讨论】:

  • 我不理解预期的行为与显示的行为。你能用图片显示一下这里有什么问题吗?
  • 我认为这在android中是不可能的。

标签: android android-layout textview word-wrap


【解决方案1】:

据我所知,没有您需要的最后一行优先方式,但是,我想提出一些建议:

解决方案 1:让您的文本视图(顶部)为单行且带有椭圆大小。这样,您将确保您的文本视图始终位于容器的底部,并在文本的末尾使用单行和 ...。缺点是文字可能无法完全显示。

android:singleLine="true"
android:ellipsize="end"

解决方案 2:您需要计算文本每个字符的大小,将顶部文本视图拆分为 2 个文本视图,为这 2 个文本视图分配文本。例如,在您的情况下。在计算出文本的大小并与文本视图的大小(在这种情况下为宽度)进行比较后,您会将“The 20/20”分配给最上面的那个,剩下的就是“Experience - 2 of 2 (豪华版)”到顶部底部的一个。这也适用于超过 2 行的长文本。只需计算并正确应用,它就会起作用。以下是计算文本大小(以像素为单位)的代码:

Paint p = new Paint();
        String your_text = "This is your text";
        float size = p.measureText(your_text);
        // assign one part to the top-top
        // assign another part to the top-bottom

希望这会有所帮助。

【讨论】:

    【解决方案2】:
    // try this way
    <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:gravity="center">
    
            <ImageView
                    android:layout_width="70dp"
                    android:layout_height="70dp"
                    android:adjustViewBounds="true"
                    android:scaleType="fitXY"
                    android:src="@drawable/ic_launcher"/>
    
            <LinearLayout
                    android:layout_width="0dp"
                    android:layout_weight="1"
                    android:layout_marginLeft="5dp"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">
    
                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="First TextView"/>
                <TextView
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="1dp"
                        android:text="Second TextView"/>
    
            </LinearLayout>
    </LinearLayout>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2019-09-03
      • 1970-01-01
      • 2012-09-22
      相关资源
      最近更新 更多