簡體   English   中英

工具欄后退按鈕功能

[英]toolbar back button functionality

我遇到了工具欄和后退按鈕的問題。 這是我的設置:

在此輸入圖像描述

當我添加一個細節片段時,我會按照此處所述為工具欄漢堡包設置動畫 這會使漢堡包成為箭頭的動畫。

即使在評論部分,用戶也會提到:

這非常有效。 只需將start = 0和end = 1設置為從漢堡包轉到箭頭,然后將start = 1和end = 0設置為箭頭轉換為漢堡包。 您需要跟蹤的一件事是當箭頭顯示時抽屜關閉。 此時,漢堡包最終被顯示(因為抽屜的滑動),你必須糾正。

但我無法弄清楚如何使后箭頭正常運行。 當我按下后箭頭時,抽屜打開,細節片段不會彈出。 我應該怎么做呢?

問題

  • 添加細節片段時,我應該如何為漢堡包添加動畫效果? 假設鏈接的解決方案不夠好。
  • 如何覆蓋后退箭頭以僅執行我希望的特定功能? 喜歡給漢堡包制作動畫,彈出后背堆疊而不打開抽屜。

經過幾個小時的搜索和游戲,我能夠構建一個滿足每個要求的解決方案。 來源: 12

detailFragmentActive = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setSupportActionBar(mToolbar);
    ...
    mToolbar.setNavigationOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(detailFragmentActive) {
                        onBackPressed();
                        //if(displayBackAgain)
                        //return; //return after so you don't call syncState();
                    }else if (mDrawerLayou.isDrawerOpen(GravityCompat.START))
                        mDrawerLayout.closeDrawer(GravityCompat.START);
                    else
                        mDrawerLayout.openDrawer(GravityCompat.START);

                    mDrawerToggle.syncState();
                }
            });
}

private void animateHamburger(boolean isArrow){
        int start = 0, end = 1;

        if(isArrow){
            detailFragmentActive = false;
            start = 1; end = 0;
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
        }else{
            detailFragmentActive = true;
            mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        }
        ValueAnimator anim = ValueAnimator.ofFloat(start, end);
        anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                float slideOffset = (Float) valueAnimator.getAnimatedValue();
                mDrawerToggle.onDrawerSlide(mDrawerLayout, slideOffset);
            }
        });
        anim.setInterpolator(new DecelerateInterpolator());
        anim.setDuration(500);
        anim.start();
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    animateHamburger(true);
}

public void onFragmentChange(){
    ...
    animateHamburger(false);
}

您可以為此按鈕設置監聽器:

toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if (flagDeterminingAction) {
                drawerLayout.openDrawer(drawerListView);
            } else {
                onBackPressed();
               //or popbackstack or whatever you are using to going back in navigation
            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM