调整多行textview的大小以更正大小

时间:2012-12-03 01:35:51

标签: java android android-layout

我有一个TextView,其文字太大,无法放在一行上,所以它在不同的行上显示我的全文。但是,TextView的宽度现在占据整个屏幕,即使文本本身没有。

例如,说我的文字是"有些长篇文章"。 得到如下显示:

有些长 文字

我已经使用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的宽度为&#34;有些长&#34;,而不是更宽。我该怎么做?

由于

2 个答案:

答案 0 :(得分:0)

要解决的两种方法:

一个是:

设置父布局的layout_width = wrap_content

其他是:

代码中的

测量textview的宽度,并设置宽度

答案 1 :(得分:0)

如@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的更改。