自定義ScrollView最大內容顯示高度
阿新 • • 發佈:2019-01-02
最近專案中遇到了這樣一種顯示效果,當ScrollView中顯示內容量小的時候自適應高度不滾動,當ScrollView中顯示內容量大的時候需要將其高度設定為螢幕高度的一半且可以滾動檢視,由於ScrollView沒有設定其最大高度的屬性,所以就自定義了一個ScrollView來滿足我們的顯示要求。
自定義一個View繼承ScrollView並重寫其onMeasure方法,在此方法中設定控制元件最大高度不能超過螢幕高度的一半(當然大家可以根據自己的需要來進行設定)。
程式碼如下:
public class MyScrollView extends ScrollView {
private Context mContext;
public MyScrollView(Context context) {
this(context, null);
}
public MyScrollView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this .mContext = context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
try {
Display display = ((Activity) mContext).getWindowManager().getDefaultDisplay();
DisplayMetrics d = new DisplayMetrics();
display.getMetrics(d);
// 設定控制元件最大高度不能超過螢幕高度的一半
heightMeasureSpec = MeasureSpec.makeMeasureSpec(d.heightPixels / 2, MeasureSpec.AT_MOST);
} catch (Exception e) {
e.printStackTrace();
}
// 重新計算控制元件的寬高
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
在佈局檔案中使用:
<com.wiggins.widget.MyScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fadingEdge="none"
android:fillViewport="true"
android:overScrollMode="never">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dip20"
android:layout_marginRight="@dimen/dip20"
android:textColor="@color/black"
android:textSize="@dimen/dip15" />
</com.wiggins.widget.MyScrollView>
注:
1、去除ScrollView邊界陰影
1.1 在xml中新增:android:fadingEdge=”none”
1.2 程式碼中新增:scrollView.setHorizontalFadingEdgeEnabled(false);
2、去除ScrollView拉到頂部或底部時繼續拉動後出現的陰影效果,適用於2.3及以上
2.1 在xml中新增:android:overScrollMode=”never”
3、當ScrollView子佈局不足以鋪滿全屏的時候其高度就是子佈局高度之和,此時如果想讓ScrollView鋪滿全屏時只需要設定以下屬性即可
3.1 在xml中新增:android:fillViewport=”true”
通過以上配置後就可以實現我們所要達到的效果了。