我正在创建一个自定义TextView
,可以像这样在两端绘制文本,这支持多行,这样文本视图的数量可以减少一半(我得到一个lint警告,抱怨80多个视图,大多数视图是我的布局中的TextViews,如名字,在网格布局中添加的姓氏)
请看屏幕截图,这是视图的当前状态
当高度固定时它会显示文本,我不想要这种行为,因为右边的文本可以是任意长度,它应该将高度包裹到所需的高度。这是被覆盖的onMeasure
方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mRightText == null) return;
initStaticLayout();
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mLayout.getHeight());
}
mLayout
是一个StaticLayout
private void initStaticLayout() {
if (mLayout == null) {
mLayout = new StaticLayout(mRightText, mPaint,
getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
}
}
如果高度设置为wrap_content
它没有绘制任何东西。
而在xmlfile中为什么不能创建两个textview,将layout_weight保持为1.这样整个屏幕将被分成两个相等的分区。
当我在模拟器中尝试视图时,一旦活动启动,我就会遇到此异常,
java.lang.IllegalArgumentException: Layout: -xx < 0
这是关于宽度的initStaticLayout
mLayout = new StaticLayout(mRightText, mPaint,
/*the error was here*/ getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
我把它从getWidth()
改为screenWidth
,现在我可以包裹高度,无论正确的文字有多大。我不知道为什么修复宽度问题修复了高度问题,可能是因为异常,布局无法生成预览。
谢谢@pskink的adb提示,谢谢大家