成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

ScrollView嵌套ListView滑動沖突的簡單解決方法

dingding199389 / 3218人閱讀

摘要:和這兩個控件想必大家都不會陌生,但是這兩者嵌套使用的時候就會出現(xiàn)麻煩。那我們該怎么辦呢別著急,有一個簡單的方法可以起死回生。這些步驟是為了保證的高度不出現(xiàn)問題。

ScrollView和ListView這兩個控件想必大家都不會陌生,但是這兩者嵌套使用的時候就會出現(xiàn)麻煩。比如,我們?nèi)绻朐贚istView下面添加其他的布局或者控件,然后想讓它們作為一個整體都可以滑動的話,最常想到的就是用一個ScrollView把它們包裹起來。想法似乎很美好,但是現(xiàn)實就有點殘酷了。我們可以寫一個小例子體驗一下。

首先創(chuàng)建一個Activity,在它的布局文件上放置一個ListView:




    
    


然后在代碼中使用for循環(huán)生成一些數(shù)據(jù),并使用ArrayAdapter適配數(shù)據(jù)。這里允許我偷一下懶,ListView的item布局直接使用Android提供的R.layout.simple_list_item_1,而沒有自己去自定義。

public class TestActivity extends Activity {
    private ListView listView;
    private ArrayList list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);
        listView = (ListView) findViewById(R.id.listView);
findViewById(R.id.ll_container);

        list = new ArrayList<>();
        //生成需要顯示到ListView中的數(shù)據(jù)
        for (int i = 0; i < 30; i++) {
            list.add("這是數(shù)據(jù)"+i);
        }
        //使用ArrayAdapter適配數(shù)據(jù)
        listView.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,list));
    }
}

確保你當前的Activity為啟動Activity,然后運行App,可以看到如下的效果:

好,看起來沒有問題,但是如果這時我們需要在這個ListView的頭部或者底部添加一些控件,然后讓它們整體都可以滑動呢?我們可以先這樣試試:




    

        
            
        

        

        

        

在ListView的頭部和底部加了幾個控件,然后把所有的控件都用一個線性布局包裹起來,再把最外層的布局改為ScrollView,再次運行,麻煩出現(xiàn)了:

天!我們的ListView只剩下小小的一行了!試著滑動一下,發(fā)現(xiàn)滑動是沒有問題的,就是只能顯示一行。那我們該怎么辦呢?

別著急,有一個簡單的方法可以起死回生。我們可以自定義一個ListView:

/**
 * 自定義ListView
 */
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
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        heightMeasureSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2,//右移運算符,相當于除于4
                MeasureSpec.AT_MOST);//測量模式取最大值
        super.onMeasure(widthMeasureSpec,heightMeasureSpec);//重新測量高度
    }
}

在這個ListView中我們重寫了onMeasure方法,然后重新定義heightMeasureSpec參數(shù),它的大小取最大值的四分之一(一般的做法),測量模式取最大值,然后調用父類的構造方法重新傳入heightMeasureSpec參數(shù)。這些步驟是為了保證ListView的高度不出現(xiàn)問題。完成后,我們在布局文件中使用自定義的ListView:




    

        

        

        

        

        

運行之后,發(fā)現(xiàn)問題解決了!ListView可以完整地顯示,而且也可以滑動到頭部和頂部的布局。

其實要想顯示ListView的頭部或者底部布局或者控件的話不一定要用ScrollView,我們也可以將頭部和底部作為一個整體的布局,即頭布局或者腳布局,然后調用ListView的addHeaderView方法或者addFooterView方法就可以將它添加到ListView的頭部或者底部了。

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/67137.html

相關文章

發(fā)表評論

0條評論

dingding199389

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<