android - 如果文本太长,将两个并排的 TextView 移动到另一个下面

标签 android android-layout textview

我有两个这样的 TextView :

=======================
= TextView1 TextView2 =
=======================

我想检测 TextView 何时太长以至于它们显示如下:

=======================
=      TextView1      =
=      TextView2      =
=======================

目前对于较长的文本,是这样显示的:

=======================
= TextView1 Text      =
=           View2     =
=======================

我该怎么做,当文本很短时,textview 并排放置,当文本太长时,第二个 textview 不拆分而是移到第二行?

我想出一个解决方案来创建单个 TextView 并根据长度构建文本(文本 1 + 填充 + 文本 2 如果短,文本 1 + "\n"+ 文本 2 如果长)但我不喜欢这个解决方案。

有什么方法可以检测第二个文本是否会被拆分,从而改变包含 TextView 的布局方向,从水平方向到垂直方向?

更新

这是我的 xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:gravity="center">

    <TextView
        android:id="@+id/my_text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="10dp"
        android:text="@string/text1"/>

    <TextView
        android:id="@+id/my_text_2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:layout_marginRight="5dp"/>

</LinearLayout>

最佳答案

我找到了更好的解决方案。将我的 TextView 更改为可自动调整大小的 TextView (更多信息 here)

此外,每个 TextView 都在一个单独的布局中,以确保两个 TextView 的大小调整为相同的值。 我的 xml 看起来像这样:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent"
              android:id="@+id/value_linear_layout"
              android:gravity="center">

    <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:layout_height="wrap_content">
        <com.mihaela.view.AutoResizeTextView
            android:id="@+id/my_text_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

    <LinearLayout 
            android:layout_width="wrap_content"
            android:layout_weight="1"
            android:layout_height="wrap_content">

        <com.mihaela.view.AutoResizeTextView
            android:id="@+id/my_text_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </LinearLayout>

</LinearLayout>

我已经从 AutoResizeTextView 中实现了 OnTextResizeListener 来做到这一点:

public class TextWidthResizeListener implements OnTextResizeListener {

    @Override
    public void onTextResize(TextView textView, float oldSize, float newSize) {
        TextPaint paint = textView.getPaint();
        if (paint.measureText(textView.getText().toString()) > (valueLinearLayout.getWidth() / 2)){
            valueLinearLayout.setOrientation(LinearLayout.VERTICAL);
        }
    }
}

其中 valueLinearLayout 是:

valueLinearLayout = (LinearLayout)findViewById(R.id.value_linear_layout);

这个解决方案最适合我,因为 TextView 在并排时会被标注尺寸,直到达到最小尺寸。当达到最小尺寸时,文本仍然放不下, TextView 将一个接一个地对齐。

此外,监听器的这个想法也可以应用于不可调整大小的 TextView 。 我会将此答案设置为正确答案。

关于android - 如果文本太长,将两个并排的 TextView 移动到另一个下面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11396031/

相关文章:

android - 通知按钮点击不起作用

android - 在代码中设置android TextViews和Buttons

android - 滚动时使用协调器布局的额外空间

android - TextView 与 Html.fromHtml 格式问题

android - SearchView Edittext 不显示光标

android - 如何根据日期和时间android每半小时重置一次计数?

android - fragment onHiddenChanged 未调用

安卓 : Expandable ListView Adapter from Database/ContentProvider/ContentResolver

android - 在 LinearLayout 中嵌套 RelativeLayouts

java - 将 TextView 文本设置为与 EditText 字段文本颜色相同的颜色