【问题标题】:Resize multi-line textview to correct size调整多行文本视图的大小以正确大小
【发布时间】:2012-12-03 01:35:50
【问题描述】:

我有一个 TextView,它的文本太大而无法在一行中显示,因此它将我的全文显示在不同的行中。但是,TextView 的宽度现在占据了全屏,即使文本本身没有。

例如,假设我的文本是“一些长文本”。 Get的显示如下:

有些长
文字

我已经使用 wrap_content 定义了 TextView。

<TextView 
    android:id="@+id/txtMainText" 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Some long text"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="#000000" />

我希望 TextView 的宽度是“Some long”的宽度,而不是更宽。我该怎么做?

谢谢

【问题讨论】:

标签: java android android-layout


【解决方案1】:

两种方法解决:

一个是:

设置父布局的 layout_width = wrap_content

另一个是:

在您的代码中测量文本视图的宽度,并设置宽度

【讨论】:

  • 因为我有同样的问题,我想试试你的解决方案,但我已经在使用你的第一种方法了。可悲的是,它不起作用。
【解决方案2】:

正如@EarlGrey 所说,请参阅Why is wrap content in multiple line TextView filling parent?

public class WrapWidthTextView extends AppCompatTextView {

    public WrapWidthTextView(Context context) {
        super(context);
    }

    public WrapWidthTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public WrapWidthTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthSpec, int heightSpec) {
        int widthMode = MeasureSpec.getMode(widthSpec);

        // If wrap_content.
        if (widthMode == MeasureSpec.AT_MOST) {
            Layout layout = getLayout();
            if (layout != null) {
                int maxWidth = (int) Math.ceil(getMaxLineWidth(layout)) +
                        getCompoundPaddingLeft() + getCompoundPaddingRight();
                widthSpec = MeasureSpec.makeMeasureSpec(maxWidth, MeasureSpec.AT_MOST);
            }
        }
        super.onMeasure(widthSpec, heightSpec);
    }

    private float getMaxLineWidth(Layout layout) {
        float max_width = 0f;
        int lines = layout.getLineCount();
        for (int i = 0; i < lines; i++) {
            if (layout.getLineWidth(i) > max_width) {
                max_width = layout.getLineWidth(i);
            }
        }
        return max_width;
    }
}

在 XML 中:

<com.your_package.WrapWidthTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ... 
/>

不要忘记重建项目以查看 XML 的变化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多