Как показать и скрыть ActionBar с помощью AppCompat v.7
У меня есть простое приложение, которое отображает текст.
Приложение начинается с главного экрана с несколькими параметрами (например, с помощью кнопки информации, которая приводит к информации об этом приложении, кнопке просмотра, которая позволяет пользователю видеть все отдельные фрагменты текста, которые могут отображаться). Основная кнопка приводит к другому экрану, на котором отображается текст. Прокручивая влево и вправо, он может видеть разные фрагменты текста. Это основная цель приложения.
В настоящее время у меня есть ActionBar. Моя MainActivity.Java расширяет AppCompatActivity. Все в приложении находится в этом упражнении.
Теперь я хочу сделать так, чтобы ActionBar отображался только в режиме "Display", а не на экране запуска или "info" / "browse".
Возможно ли иметь ActionBar в одной части приложения и нет ActionBar в другой части приложения? (И сохранить все в одной активности?)
Я пытался сделать это безрезультатно. Если это возможно, что мне делать дальше?
До сих пор я пытался сделать следующее:
1) Создайте эту тему
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
И примените его к MainActivity...
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:theme="@style/Theme.AppCompat.NoActionBar" >
....
После этого ActionBar все еще был там. (Это происходит из этого сообщения S.O. (android: windowNoTitle не будет скрывать панель действий с помощью appcompat-v7 21.0.0)
2) Еще одна попытка состояла в том, чтобы добавить это в onCreate.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.activity_main);
Это было связано с изучением этого S.O. post: (Как скрыть панель действий до создания активности, а затем снова показать ее?)
Любые предложения?
Ответы
Ответ 1
В действиях , где вы не хотите иметь панель действий, используйте тему, полученную из Theme.AppCompat.NoActionBar
или Theme.AppCompat.Light.NoActionBar
. Эта активность никогда не сможет отобразить панель действий, если вы не предоставите свой собственный через setSupportActionBar(Toolbar)
.
В действиях , где вы хотите, чтобы панель действий использовала тему, полученную из Theme.AppCompat
, Theme.AppCompat.Light
или Theme.AppCompat.Light.DarkActionBar
. Это позволит вам динамически скрывать или показывать панель действий в такой деятельности. Этими темами вы не сможете предоставить свою собственную панель действий.
Когда работает с панелью действий appcompat-v7, вам нужно получить ее, вызвав getSupportActionBar()
вместо getActionBar()
.
Ответ 2
Вы можете скрыть и показать ActionBar программно.
Чтобы скрыть
getSupportActionBar().hide();
Показать
getSupportActionBar().show();
Это также можно сделать из фрагментов
Чтобы скрыть
getActivity().getSupportActionBar().hide();
Показать
getActivity().getSupportActionBar().show();
Edit:
Как отмечено @RenniePet,
Вам нужно позвонить ((AppCompatActivity)getActivity()).getSupportActionBar()
, если вы используете Toolbar
как ActionBar
.
Ответ 3
Расширьте свою активность как AppCompatActivity
, а затем используйте панель действий как: -
getSupportActionBar().hide(); // for hiding
getSupportActionBar().show(); // for showing
Ответ 4
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
<item name="android:windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
удалите андроид в окне itemActionbar.just, как показано ниже:
<style name="Theme.AppCompat.NoActionBar" parent="Theme.AppCompat.Light">
<item name="windowActionBar">false</item>
<item name="android:windowNoTitle">true</item>
</style>
Я надеюсь, что это может вам помочь.
Ответ 5
AppCompatActivity имеет собственную встроенную панель инструментов. Вам не нужно использовать дополнительное определение панели инструментов в основном xml.
просто вызовите getSupportActionBar(). show()
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getSupportActionBar().show();
}
public boolean onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
TextView text1=(TextView)findViewById(R.id.textView);
text1.setText("I changed the text!");
}
return super.onOptionsItemSelected(item);
}
Ответ 6
В методе onCreate после setContentView используйте это просто, чтобы показать или скрыть для каждого класса.
getSupportActionBar().hide();
getSupportActionBar().show();
Если вы хотите установить заголовок,
getSupportActionBar().setTitle("This is ToolBar");
Ответ 7
Надеюсь, это может быть решение. Он работал в моей системе:
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
Ответ 8
Отклонить ToolBar для всех действий с помощью AppTheme
:
styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"><!-- .NoActionBar -->