滚动时隐藏标题栏,滚动后显示标题栏



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

首先将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;
        }
    }
    //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
        }
    });

这个解决方案对我来说效果很好:

// 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在滚动列表视图时隐藏/显示

最新更新