0

我正在创建一个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它不绘制任何东西。

4

2 回答 2

0

而是在 xmlfile 中为什么不能创建两个 textviews 保持 layout_weight 为 1。这样整个屏幕将被分成两个相等的分区。

于 2018-02-20T11:28:20.800 回答
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 提示,谢谢大家

于 2018-02-20T12:09:54.503 回答