Как скрыть панель инструментов при прокрутке списка? (Так же, как в Google Play Store)

Хорошо, поэтому скрытие панели действий - это что-то выполнимое. Но как мы можем скрыть (недавно введенную) панель инструментов в нашей деятельности?

Я создаю приложение с активностью, имеющей тему в качестве theme.apcompat.light.noactionbar(чтобы скрыть панель действий), я разместил панель инструментов со скользящей таблицей ниже. И ниже это мой список.

Я хочу, чтобы скрыть панель инструментов, когда я просматриваю список. Но разворот должен оставаться там. И хотя в середине списка, если я прокручиваю вниз, панель инструментов снова должна быть видимой.

Ответ 1

Обновлено (8/24/2015):

Пожалуйста, смотрите мой последний ответ здесь, используя Design Support Library:

Скрытие ActionBar в RecyclerView/ListView onScroll

Обновлено (6/2/2015):

ListView + ToolBar - без библиотек:

См. fooobar.com/questions/122460/... и https://github.com/google/iosched/blob/master/android/src/main/java/com/google/samples/apps/iosched/ui/BaseActivity.java.

mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayShowHomeEnabled(true);
mNavigationDrawerFragment = (NavigationDrawerFragment) getFragmentManager().findFragmentById(R.id.fragment_drawer);
mNavigationDrawerFragment.setup(R.id.fragment_drawer, (DrawerLayout) findViewById(R.id.drawer), mToolbar);
mToolbar.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
    @Override
    public void onGlobalLayout() {
        if (Build.VERSION.SDK_INT >= 16) {
            mToolbar.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        } else {
            mToolbar.getViewTreeObserver().removeGlobalOnLayoutListener(this);
        }
        mToolbar.animate().translationY(-mToolbar.getBottom()).setInterpolator(new AccelerateInterpolator()).start();
    }
});

От: http://pastebin.com/yeMX3VYP

ListView + ActionBar - без библиотек:

fooobar.com/questions/117012/...

Недавно мне нужна была такая же функциональность, и это отлично работает для меня:

По мере того, как пользователь прокручивается вверх, ActionBar будет скрыт, чтобы дать пользователю возможность работать на всем экране.

Когда пользователь прокручивается вниз и отпустит, ActionBar вернется.

getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

listView.setOnScrollListener(new OnScrollListener() {
    int mLastFirstVisibleItem = 0;

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {   }           

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {    
        if (view.getId() == listView.getId()) {
            final int currentFirstVisibleItem = listView.getFirstVisiblePosition();

            if (currentFirstVisibleItem > mLastFirstVisibleItem) {
                // getSherlockActivity().getSupportActionBar().hide();
                getSupportActionBar().hide();
            } else if (currentFirstVisibleItem < mLastFirstVisibleItem) {
                // getSherlockActivity().getSupportActionBar().show();
                getSupportActionBar().show();
            }

            mLastFirstVisibleItem = currentFirstVisibleItem;
        }               
    }
});

Ответ 2

Используйте следующий код:

ViewCompat.setNestedScrollingEnabled(listView, true);

Ответ 3

для recyclerView мне удалось сделать это следующим образом:

public class FragmentsOnScrollListener extends RecyclerView.OnScrollListener {

    private final MainActivity mainActivity;
    private final View bothToolbarLayouts;
    private int approxToolbarHeight;

    public FragmentsOnScrollListener(MainActivity activity) {
        mainActivity = activity;
        bothToolbarLayouts = mainActivity.getBothToolbarLayouts();
    }

    @Override
    public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
        super.onScrolled(recyclerView, dx, dy);

        approxToolbarHeight += dy;
        bothToolbarLayouts.animate().translationY(-approxToolbarHeight).setInterpolator(new AccelerateInterpolator()).start();
    }
}