2

我有一个 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”的宽度,而不是更宽。我该怎么做?

谢谢

4

2 回答 2

0

两种解决方法:

一个是:

设置父布局的 layout_width = wrap_content

另一个是:

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

于 2012-12-03T02:35:38.007 回答
0

正如@EarlGrey 所说,请参阅为什么将内容包装在多行 TextView 填充父项中?.

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 的变化。

于 2019-05-16T15:38:46.937 回答