最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android 中ScrollView嵌套GridView,ListView的實例

 更新時間:2017年03月27日 15:13:51   作者:gengqiquan  
這篇文章主要介紹了Android 中ScrollView嵌套GridView,ListView的實例的相關(guān)資料,需要的朋友可以參考下

Android 中ScrollView嵌套GridView,ListView的實例

在Android開發(fā)中,經(jīng)常有一些UI需要進行固定style的動態(tài)布局,然而由于現(xiàn)在的UI都喜歡把一個界面拉的很長,所以我們很多情況下需要使用ScrollView來嵌套列表控件來實現(xiàn)UI。這樣就導致了很多不順心的問題。

問題一:列表控件顯示不完全

原因是嵌套情況下,ScrollView不能正確的計算列表控件的高度。

有兩種解決方案

方案一

在適配器賦值完成后代碼動態(tài)計算列表的高度。這里貼出ListView的計算代碼,GridView的計算方式類似,不過需要考慮列數(shù),下面代碼沒有加上列表控件padding的計算,如果你設(shè)置了這個屬性,需要加上計算代碼

public void setListViewHeightBasedOnChildren(ListView listView) {  
    // 獲取ListView對應的Adapter  
    ListAdapter listAdapter = listView.getAdapter();  
    if (listAdapter == null) {  
      return;  
    }  

    int totalHeight = 0;  
    for (int i = 0, len = listAdapter.getCount(); i < len; i++) {  
      // listAdapter.getCount()返回數(shù)據(jù)項的數(shù)目  
      View listItem = listAdapter.getView(i, null, listView);  
      // 計算子項View 的寬高  
      listItem.measure(0, 0);  
      // 統(tǒng)計所有子項的總高度  
      totalHeight += listItem.getMeasuredHeight();  
    }  

    ViewGroup.LayoutParams params = listView.getLayoutParams();  
    params.height = totalHeight+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));  
    // listView.getDividerHeight()獲取子項間分隔符占用的高度  
    // params.height最后得到整個ListView完整顯示需要的高度  
    listView.setLayoutParams(params);  
  }  

方案二

重寫列表控件的onMeasure方法,這種方案不會出現(xiàn)列表控件本身的滾動條,并且viewholder復用機制會失效

@Override
  public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    int expandSpec = MeasureSpec.makeMeasureSpec(1 << 16, MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);
  }

方案一代碼多,需要多次寫,建議寫成工具類方便調(diào)用;方案二在數(shù)據(jù)量大到不能一屏顯示完的情況下會有性能問題,而且快速滑動的時候ScrollView會不停的去計算列表控件的高度。賊影響繪制性能。
兩種方案有利有弊,大家自己取舍

問題二:列表控件自動獲取焦點,導致ScrollView自動滾動到列表控件所在的位置

這個問題其實有很多種解決方案,歸結(jié)起來是兩種。

方案一

等待列表控件數(shù)據(jù)全部加載完成后(包括圖片加載)調(diào)用ScrollView.fullScroll(ScrollView.FOCUS_UP);

方法讓ScrollView滾動到頂部。這個加載完成的時間不好控制,搞得不好會有滾動動畫出現(xiàn),很尷尬的事情。

方案二

重寫列表控件的如下兩個方法,使之固定返回false

@Override
  public boolean isFocused() {
    return false;
  }

  @Override
  public boolean requestFocus(int direction, Rect previouslyFocusedRect) {
    return false;
  }

兩種方案的優(yōu)缺點很明顯,喔,第二種方案的缺點我目前沒發(fā)現(xiàn)。如果你這么使用發(fā)現(xiàn)了什么坑,請留言告知

問題三 滑動沖突

解決起來也離不開幾個要點,不過首先你得熟悉view的事件傳遞

你需要根據(jù)情況決定重寫列表控件與ScrollView的如下幾個方法,根據(jù)情況給方法返回不同的bool值來告訴控件是否攔截或者傳遞事件,需要哪個控件相應哪個方向的滾動事件就攔截哪個方向的事件傳遞,作為一個有追求的開發(fā)者,切記不要一通亂攔截

 @Override
  public boolean onTouchEvent(MotionEvent ev) {
    return super.onTouchEvent(ev);
  }

  @Override
  public boolean onInterceptTouchEvent(MotionEvent ev) {
    return super.onInterceptTouchEvent(ev);
  }

  @Override
  public boolean dispatchTouchEvent(MotionEvent ev) {
    return super.dispatchTouchEvent(ev);
  }

給個小彩蛋

getParent().requestDisallowInterceptTouchEvent(boolean b);

這一句代碼可以在子控件里決定是否讓父容器獲取事件

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關(guān)文章

  • 解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible的問題

    解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is inco

    這篇文章主要介紹了解決Android Studio4.1沒有Gsonfomat插件,Plugin “GsonFormat” is incompatible (supported only in IntelliJ IDEA)的問題 ,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-12-12
  • Android中自定義Window Title樣式實例

    Android中自定義Window Title樣式實例

    這篇文章主要介紹了Android中自定義Window Title樣式實例,本文給出效果預覽和實現(xiàn)方法,需要的朋友可以參考下
    2015-01-01
  • Android簡單實現(xiàn)屏幕下方Tab菜單的方法

    Android簡單實現(xiàn)屏幕下方Tab菜單的方法

    這篇文章主要介紹了Android簡單實現(xiàn)屏幕下方Tab菜單的方法,簡單分析了Android實現(xiàn)tab菜單所涉及的界面布局及功能相關(guān)操作技巧,需要的朋友可以參考下
    2016-08-08
  • Android View轉(zhuǎn)換為Bitmap實現(xiàn)應用內(nèi)截屏功能

    Android View轉(zhuǎn)換為Bitmap實現(xiàn)應用內(nèi)截屏功能

    這篇文章主要介紹了Android View轉(zhuǎn)換為Bitmap實現(xiàn)應用內(nèi)截屏功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-09-09
  • Android實現(xiàn)文字滾動播放效果的代碼

    Android實現(xiàn)文字滾動播放效果的代碼

    這篇文章主要介紹了Android實現(xiàn)文字滾動播放效果,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Android中圖片占用內(nèi)存的深入分析

    Android中圖片占用內(nèi)存的深入分析

    我們在日常開發(fā)中應該經(jīng)常思考這些問題,圖片占用內(nèi)存跟哪些東西有關(guān)?跟手機有關(guān)系么?這篇文章主要給大家介紹了關(guān)于Android中圖片占用內(nèi)存的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • Android Studio 4.1沒有GsonFormat插件的解決

    Android Studio 4.1沒有GsonFormat插件的解決

    這篇文章主要介紹了Android Studio 4.1沒有GsonFormat插件的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • Android新浪微博下拉刷新(最新消息顯示在最上面)

    Android新浪微博下拉刷新(最新消息顯示在最上面)

    查看最新消息要用到類似新浪微博下拉刷新,想必這個功能很多的朋友都會使用吧,下面與大家分享下具體的實現(xiàn)方法,感興趣的朋友可以參考下哈
    2013-05-05
  • Android 打開網(wǎng)絡(luò)上pdf文件

    Android 打開網(wǎng)絡(luò)上pdf文件

    本文主要介紹了Android打開網(wǎng)絡(luò)上pdf文件的方法,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android?ANR分析trace文件的產(chǎn)生流程詳情

    Android?ANR分析trace文件的產(chǎn)生流程詳情

    這篇文章主要介紹了Android?ANR分析trace文件的產(chǎn)生流程詳情,文章圍繞主題展開相詳細的內(nèi)容介紹,需要的朋友可以參考一下
    2022-07-07

最新評論

定陶县| 华蓥市| 荔浦县| 新田县| 灌云县| 永吉县| 新绛县| 嘉峪关市| 靖西县| 垣曲县| 石河子市| 洞头县| 新平| 宝鸡市| 施秉县| 永仁县| 加查县| 色达县| 尤溪县| 新泰市| 保亭| 凌云县| 湘西| 云安县| 沁源县| 始兴县| 东丽区| 安陆市| 镇宁| 正镶白旗| 罗江县| 基隆市| 安吉县| 宁陕县| 涿州市| 陆良县| 汾西县| 郎溪县| 南投县| 安达市| 大宁县|