2016-11-18 78 views

回答

0

您可以檢查配置更改(方向)AppBarLayout的狀態,存放。然後,您可以在應用配置更改後爲AppBarLayout設置該狀態。

public class CheeseDetailActivity extends AppCompatActivity { 

public static final String EXTRA_NAME = "cheese_name"; 
AppBarLayout appBarLayout; 
boolean isCollapsed = false; 

//state change listener 
AppBarLayout.OnOffsetChangedListener toolbarStateListener = new AppBarLayout.OnOffsetChangedListener() { 
    @Override 
    public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) { 
     if (verticalOffset == 0) { 
      // Collapsed 
      isCollapsed = true; 
     } else { 
      // Not collapsed 
      isCollapsed = false; 

     } 
    } 
}; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_detail); 

    Intent intent = getIntent(); 
    final String cheeseName = intent.getStringExtra(EXTRA_NAME); 

    final Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

    CollapsingToolbarLayout collapsingToolbar = 
      (CollapsingToolbarLayout) findViewById(R.id.collapsing_toolbar); 
    collapsingToolbar.setTitle(cheeseName); 

    //getting app bar layout 
    appBarLayout = (AppBarLayout) findViewById(R.id.appbar); 
    //set listener to listen state change of app bar layout 
    appBarLayout.addOnOffsetChangedListener(toolbarStateListener); 

    loadBackdrop(); 
} 


@Override 
public void onSaveInstanceState(Bundle savedInstanceState) { 
    super.onSaveInstanceState(savedInstanceState); 
    //save state on orientation change 
    savedInstanceState.putBoolean("isCollapsed", isCollapsed); 
} 

@Override 
public void onRestoreInstanceState(Bundle savedInstanceState) { 
    super.onRestoreInstanceState(savedInstanceState); 
    //get state on orientation change 
    isCollapsed = savedInstanceState.getBoolean("isCollapsed"); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    //set state of app bar layout 
    appBarLayout.setExpanded(isCollapsed); 
} 

private void loadBackdrop() { 
    final ImageView imageView = (ImageView) findViewById(R.id.backdrop); 
    Glide.with(this).load(Cheeses.getRandomCheeseDrawable()).centerCrop().into(imageView); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.sample_actions, menu); 
    return true; 
} 
} 

我在CheeseSquare存儲庫中編輯了CheeseDetailActivity。

+0

這不工作,我想要的是工具欄保持在相同的狀態(這已經發生在默認行爲),但標題總是在正確的位置。如果您查看視頻,您可以看到旋轉設備後標題消失。 – MichelReap

+0

您是否檢查過https://code.google.com/p/android/issues/detail?id=184950。這個問題已經結束。您可以使用新版本的支持庫來避免這種情況。我正在使用支持庫版本25.0.1。在這裏它正在工作。 –

+0

你是對的,它不會發生在最新版本。 – MichelReap

0

在onConfigurationChanged你可以嘗試運行

handler.postDelayed(new Runnable(){ 
    @Overrride 
    public void run(){ 
     toolbar.invalidate(); 
    } 
},[Try different time lapses(miliseconds)]); 
+0

但是,這將是顯而易見的呢? – MichelReap

+0

你有沒有試過?,也許是如此之快,它並不明顯。我知道是很hacky,但我不知道如何解決這個xD –