2016-11-18 4 views
0

Я пытаюсь создать разборную панель инструментов, как один на chesesquare хранилище, но я столкнулся с этой проблемой:Toolbar название исчезает при смене ориентации в свернутом состоянии

https://www.youtube.com/watch?v=THdxcyEc1CA&feature=youtu.be

Кто-нибудь знает, как решить эту проблему ?

+0

Вы хотите, чтобы панель инструментов всегда расширялась, в том же состоянии (открыта/закрыта) от портрета к пейзажу? –

+0

Было бы желательно, да, так же, как и вы, но с правильным расположением. – MichelReap

ответ

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; 
} 
} 

Я отредактировал CheeseDetailActivity в репозитории CheeseSquare.

+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

вы пробовали ?, возможно, так быстро, что это не заметно. я знаю, довольно хаки, но я понятия не имею, как решить этот xD –