I am creating a custom TextView
which can draw text at both ends like this,and this supports multiline, so that the number of text views can be cut down to half(I got a lint warning, complaining about 80+ views, and most of the views are TextViews in my layout, like first name , last name added in a grid layout)
Please see the screen shot, this is the current state of the view
It will show the text when the height is fixed, i don't want this behavior because the text on the right can be of any length and it should wrap the height to the desired height. This is the overridden onMeasure
method
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
if (mRightText == null) return;
initStaticLayout();
setMeasuredDimension(MeasureSpec.getSize(widthMeasureSpec), mLayout.getHeight());
}
mLayout
is a StaticLayout
private void initStaticLayout() {
if (mLayout == null) {
mLayout = new StaticLayout(mRightText, mPaint,
getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
}
}
if the height is set to wrap_content
it is not drawing anything.
When i tried the view in emulator, I got this exception as soon as the activity is launched,
java.lang.IllegalArgumentException: Layout: -xx < 0
that is from the initStaticLayout
regarding the width
mLayout = new StaticLayout(mRightText, mPaint,
/*the error was here*/ getWidth() / 2 - getPaddingRight() - getPaddingLeft(),
Layout.Alignment.ALIGN_NORMAL,
1, 0, true);
and i changed it from getWidth()
to screenWidth
and now i can wrap the height, no matter how big the right text is. I don't know why fixing a width issue fixed a height issue, may be because of the exception , the layout is not able to generate preview.
Thank you @pskink for the adb tip and thank you every one