我有一个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;,而不是更宽。我该怎么做?
由于
答案 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的更改。