度量的自定义视图无法按预期工作

时间:2018-02-20 11:17:15

标签: android android-custom-view onmeasure

我正在创建一个自定义TextView,它可以像这样在两端绘制文本,这支持多行,因此文本视图的数量可以减少一半(我得到一个lint警告,抱怨80多个视图,大多数视图都是我的布局中的TextViews,如名字,在网格布局中添加的姓氏)

请看屏幕截图,这是视图的当前状态

Screen shot

当高度固定时会显示文字,我不想要这种行为,因为右边的文字可以是任意长度,它应该将高度包裹到所需的高度。这是重写的onMeasure方法

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    if (mRightText == null) return;
    initStaticLayout();
    setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mLayout.getHeight());
}

mLayoutStaticLayout

private void initStaticLayout() {
    if (mLayout == null) {
        mLayout = new StaticLayout(mRightText, mPaint, 
                getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
                Layout.Alignment.ALIGN_NORMAL, 
                1, 0, true);
    }
}

如果高度设置为wrap_content则不会绘制任何内容。

2 个答案:

答案 0 :(得分:0)

而不是xmlfile为什么你不能创建两个文本视图,将layout_weight保持为1。 这样整个屏幕就会分成两个相等的分区。

答案 1 :(得分:0)

当我在模拟器中尝试视图时,一旦启动了活动,我就会遇到此异常,

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提示并感谢每一位