This worked for me to make it customizable in xml:
MaxHeightScrollView.java:
public class MaxHeightScrollView extends ScrollView { private int maxHeight; private final int defaultHeight = 200; public MaxHeightScrollView(Context context) { super(context); } public MaxHeightScrollView(Context context, AttributeSet attrs) { super(context, attrs); if (!isInEditMode()) { init(context, attrs); } } public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); if (!isInEditMode()) { init(context, attrs); } } @TargetApi(Build.VERSION_CODES.LOLLIPOP) public MaxHeightScrollView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); if (!isInEditMode()) { init(context, attrs); } } private void init(Context context, AttributeSet attrs) { if (attrs != null) { TypedArray styledAttrs = context.obtainStyledAttributes(attrs, R.styleable.MaxHeightScrollView); //200 is a defualt value maxHeight = styledAttrs.getDimensionPixelSize(R.styleable.MaxHeightScrollView_maxHeight, defaultHeight); styledAttrs.recycle(); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { heightMeasureSpec = MeasureSpec.makeMeasureSpec(maxHeight, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } }
attr.xml
<declare-styleable name="MaxHeightScrollView"> <attr name="maxHeight" format="dimension" /> </declare-styleable>
example layout
<blah.blah.MaxHeightScrollView android:layout_weight="1" app:maxHeight="90dp" android:layout_width="fill_parent" android:layout_height="wrap_content"> <EditText android:id="@+id/commentField" android:hint="Say Something" android:background="#FFFFFF" android:paddingLeft="8dp" android:paddingRight="8dp" android:gravity="center_vertical" android:maxLines="500" android:minHeight="36dp" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </blah.blah.MaxHeightScrollView>