1. 程式人生 > 其它 >Android ScrollView與ListView衝突的解決辦法

Android ScrollView與ListView衝突的解決辦法

問題:

ScrollView巢狀ListView,出現ListView內容無法滑動的問題。

原因:

ListView滾動條無法獲取焦點。

解決方法:

ListView出現滾動是因為內容大於其所要展現的高度,歸根其原因就是內容太長,溢位螢幕之外,無法檢視,所以要滾動內容來輔助檢視。
ScrollView本身就是為了解決內容溢位的問題而存在的,那麼ListView就無需滾動,只要計量好ListView高度,展現在ScrollView當中即可。

如何讓ListView的高度等於內容高度?只需要改變其測量模式即可。

首先新建一個 MyListView 的類繼承 ListView 重寫onMeasure()

方法:

public class MyListView extends ListView{
    // 構造方法
    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }
    @Override
    // 重寫父類onMeasure方法,改變模式
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // 呼叫MeasureSpec類的makeMeasureSpec方法傳入測量值和測量模式,heightMeasureSpec的前兩位是模式,後面的才是高度
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,MeasureSpec.AT_MOST);
        // 呼叫父類傳入測量值
        super.onMeasure(widthMeasureSpec,heightMeasureSpec);
    }
}

上述程式碼其實只是為了改變ListView的測量模式
接下來在佈局檔案中像使用元件一樣使用該類即可,注意:引入自定義元件要包含完整路徑名。