【问题标题】:How to show/ hide windowActionBar programatically in Android?如何在 Android 中以编程方式显示/隐藏 windowActionBar?
【发布时间】:2016-10-01 17:11:19
【问题描述】:

我将一种风格应用于两项活动。 MainActivity.java 有工具栏设置而不是操作栏,因此,我在主题样式中有以下行来隐藏操作栏:

<item name="windowActionBar">false</item>

在另一个活动中,我启用了操作栏:

final ActionBar actionBar = getSupportActionBar();
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);

但这会返回 NOException 错误。

我尝试了以下但也没有帮助:

actionBar.show();

风格:

<style name="BrownTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/brown</item>
    <item name="colorPrimaryDark">@color/dark_brown</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="buttonStyle">@color/brown</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

阐述: 我将风格用于两项活动。第一个活动有它自己的工具栏而不是默认操作栏,第二个活动有操作栏。如果我从样式中移除,则我无法运行第一个活动,如果我放置,则我无法运行第二个活动。我想在第二个活动中以编程方式启用它。

是否有可能以编程方式更改样式项属性?或任何覆盖方法来绕过我在样式项目属性中的内容?

【问题讨论】:

    标签: java android


    【解决方案1】:

    getSupportActionBar().hide(); 隐藏

    getSupportActionBar().show(); 显示。

    【讨论】:

    • 我试过了,但是当它隐藏在样式中时,它在第二个活动中不起作用。
    • 我在两个活动中使用样式。第一个活动有它自己的工具栏而不是默认操作栏,第二个活动有操作栏。如果我从样式中移除,那么我无法运行第一个活动,如果我放置,那么我无法运行第二个活动。我想在第二个活动中以编程方式启用它。
    • 当您在样式中设置为 true 并在活动中隐藏/显示时会发生什么
    • java.lang.RuntimeException:无法启动活动 ComponentInfo{com.revittechnology.mullahnasruddin/com.revittechnology.mullahnasruddin.About}:java.lang.NullPointerException
    • 那么,在清单中分别为每个活动设置操作栏,不要使用通用样式,每个活动都有单独的样式,例如 android:theme="@style/Theme.AppCompat.Light。清单中活动标记内的 NoActionBar"
    【解决方案2】:

    我为这两个活动使用自定义工具栏修复了这个问题。

    style.xml 现在有以下主题:

    <style name="BrownTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/brown</item>
        <item name="colorPrimaryDark">@color/dark_brown</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="buttonStyle">@color/brown</item>
    </style>
    

    在第二个活动(或所有其他活动)中:

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

    以及工具栏布局(app_bar_main.xml):

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">
    
        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />
    
    </android.support.design.widget.AppBarLayout>
    

    还有活动布局:

    <include
        layout="@layout/app_bar_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-13
      • 2014-12-29
      • 2016-07-21
      相关资源
      最近更新 更多