【问题标题】:Hide the Title bar while scrolling and Show the TItle bar after Scrolling?滚动时隐藏标题栏并在滚动后显示标题栏?
【发布时间】:2014-10-20 06:48:58
【问题描述】:

我想在滚动 ListView 中的项目时隐藏标题栏,并且我想在滚动后显示标题栏。提出解决此问题的任何想法。

【问题讨论】:

    标签: android-listview scroll android-scrollview titlebar android-titlebar


    【解决方案1】:

    首先像这样将 Xml 视图添加到 ActionBar 中:

    LayoutInflater inflater = (LayoutInflater) getActionBar()
                .getThemedContext().getSystemService(LAYOUT_INFLATER_SERVICE);
    
        View customActionBarView = inflater.inflate(R.layout.main, null);
    final ActionBar actionBar = getActionBar();
        actionBar.setDisplayOptions(
                ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_SHOW_HOME);    
    
        actionBar.setCustomView(customActionBarView,
                        new ActionBar.LayoutParams(
                                ViewGroup.LayoutParams.MATCH_PARENT,
                                ViewGroup.LayoutParams.MATCH_PARENT));
                setContentView(R.layout.main);
    

    然后在 onScrollStateChanged() 方法中做修改:

        @Override
        public void onScrollStateChanged(AbsListView view, int scrollState) {
    
        switch (scrollState) {
        case SCROLL_STATE_IDLE:
                actionBar.show();
                break;
        case SCROLL_STATE_TOUCH_SCROLL:
                actionBar.hide();
                break;
            }
        }
    

    【讨论】:

      【解决方案2】:
          //declare this two globally
          public static int ch = 0, cht = 1;
          int myLastVisiblePos;
      
          //Then add onScrollListener to your ListView
      
          list.setOnScrollListener(new OnScrollListener() {
              @Override
              public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
                  int currentFirstVisPos = view.getFirstVisiblePosition();
                  if (currentFirstVisPos > myLastVisiblePos) {
                      if (ch == 1) {
                          ch++;
                          cht = 1;
                          getActionBar().hide();
                      } else if (ch == 0) {
                          getActionBar().show();
                          ch++;
                      }
                  }
                  if (currentFirstVisPos < myLastVisiblePos)
                      if (cht == 1)
                          getActionBar().show();
                  myLastVisiblePos = currentFirstVisPos;
              }
      
              @Override
              public void onScrollStateChanged(AbsListView view, int scrollState) {
                  // TODO Auto-generated method stub
              }
          });
      

      【讨论】:

      • 最后我是根据 onScrollStateChanged() 中的 switch case 完成的...而且它对我来说非常有效。
      【解决方案3】:

      这个解决方案非常适合我:

      // mLastFirstVisibleItem defined globally
      
      quranTextList.setOnScrollListener(new AbsListView.OnScrollListener() {
          @Override
          public void onScrollStateChanged(AbsListView view, int scrollState) {        
          }
      
          @Override
          public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
              /**
               * Hide actionbar when scroll down
               */
              if (mLastFirstVisibleItem < firstVisibleItem)
                  if (getSupportActionBar().isShowing())
                      getSupportActionBar().hide();
      
              if (mLastFirstVisibleItem > firstVisibleItem)
                  if (!getSupportActionBar().isShowing())
                      getSupportActionBar().show();
              mLastFirstVisibleItem = firstVisibleItem;
          }
      });
      

      来源:Android ActionBar hide/show when scrolling list view

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-08
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 2020-02-13
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多