写项目是碰到的需求,是一个弹窗里面是提示文字,文字有可能会很多,作为一个弹窗高度不能太高,太高就不美观了,所以要限定弹窗的高度,需要满足以下几点:
* ScrollView 嵌套 TextView,限制TextView最大高度。 * TextView未达到最大高度时,自适应高度且不能滚动 * TextView达到最大高度时,可滚动。
那就对 ScrollView 进行调整:
public class MaxHeightScrollView extends ScrollView {
private int maxHeight;
public MaxHeightScrollView(Context context) {
super(context);
}
public MaxHeightScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
initialize(context, attrs);
}
public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
initialize(context, attrs);
}
private void initialize(Context context, AttributeSet attrs) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView);
maxHeight = typedArray.getLayoutDimension(R.styleable.MaxHeightScrollView_maxHeight, maxHeight);
typedArray.recycle();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (maxHeight > 0) {
heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST);
}
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
XML :
<com.test.widget.MaxHeightScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp_10"
android:fillViewport="true"
android:scrollbars="vertical"
app:maxHeight="@dimen/dp_300">
<TextView
android:id="@+id/tv_msg"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:textColor="@color/col_333333"
android:textSize="@dimen/sp_14" />
</com.test.widget.MaxHeightScrollView>