我使用自动调整TextView作为ListView中的项目。此小部件重写onMeasure()并将高度设置为宽度的一半。所以文字适合这个界限。此小部件还具有侦听器,在更改字体大小时调用该侦听器。例如,如果新字体大小小于14dp,我需要将窗口小部件的高度设置为等于其宽度。所以我将新值设置为flag并调用requestLayout()。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int width = getMeasuredWidth();
int height = width;
if (halfSize) {
height = width / 2;
}
setMeasuredDimension(width, height);
}
private void init(Context context) {
this.context = context;
final float halfModeMinFontSize = DisplayUtils.dpToPx(context, 14);
setOnResizeListener(new OnTextResizeListener() {
@Override
public void onTextResize(TextView textView, float oldSize, float newSize) {
if (newSize < halfModeMinFontSize) {
setHalfSize(false);
}
}
});
}
但是调用requestLayout()并没有结果。那么如何更改ListViews项的高度并启动其度量呢?