天天看點

自定義ScrollView最大内容顯示高度

最近項目中遇到了這樣一種顯示效果,當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, );
    }

    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 / , 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”

通過以上配置後就可以實作我們所要達到的效果了。

繼續閱讀