为什么AppTheme.NoActionBar无法正常工作?

30

我在Android Studio中创建了一个安卓应用程序,并且默认创建了这些样式:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

但在某个活动中,我试图将其设置为主题:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   ...
android:theme="@style/AppTheme.NoActionBar">

然而当我运行应用程序时,我得到了操作栏:

enter image description here

为什么会出现操作栏?我做错了什么明显的事情吗,还是安卓官方开发环境Android Studio试图误导其开发人员?

这是我的Activity代码,里面没有任何可以自动显示操作栏的内容:

public class WelcomeActivity extends AppCompatActivity {
    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState, persistentState);
        setContentView(R.layout.activity_welcome);
    }
}

2
添加 <item name="android:windowFullscreen">true</item> <item name="android:windowContentOverlay">@null</item> - IntelliJ Amiya
9个回答

67

试试这样:

<style name="AppTheme.NoActionBar">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
  </style>

将此设置为清单中活动的主题,即:

<activity
    ...
    android:theme="@style/AppTheme.NoActionBar">
</activity>

1
你能解释一下为什么用户的代码没有按照他的预期工作吗? - LarsH
1
主题AppTheme.NoActionBar及其中使用的元素是活动样式。将其应用于Activity内的FrameLayout不会影响父Activity的样式。 - Mehmet K
哇塞,谢谢!!!!!我已经到处寻找了。 - Android Dev

15

其他答案对我都没用,但我找到了这个解决方案:

在Android Studio中打开values/styles.xml并更改如下:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
至:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- changed .DarkActionBar to .NoActionBar -->
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

5
如果您只是让Android Studio自动生成活动,则查看activity_welcome。此处应该有android.support.design.widget.AppBarLayout,如果您将其删除,则操作栏应该消失。

你救了我。谢谢。 - wonsuc

3

在您的布局中可能有一个操作栏,或在AndroidManifest文件中设置主题


2

如果WelcomeActivity继承自AppCompatActivity,那么请尝试使用Theme.AppCompat.NoActionBar主题:

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">
</style>

如果还没有完成,请将appcompat库的版本添加到您的build.gradle文件中:
dependencies {
    compile 'com.android.support:appcompat-v7:24.1.1'
}

1
你应该在 manifest.xml 中使用这个主题,就像这样:
 <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN"/>

                <category android:name="android.intent.category.LAUNCHER"/>
            </intent-filter>
        </activity>
    </application>

在styles.xml中:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>

    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

0
你应该添加以下内容
<item name="android:windowFullscreen">true</item>
<item name="windowActionBar">false</item>

您可以使用

 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

您可以访问 AppCompat全屏主题


0

尝试检查AndroidManifest.xml文件。我发现应用程序已经建立了主题,但我想要应用的主题必须添加到正确的活动中。


0

我在一个非主要的活动中遇到了类似的问题。我像Mehmet K的答案中所示有一个主题:

<style name="MyActivitysTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

我刚刚也添加了父主题:

<style name="MyActivitysTheme" parent="AppTheme">
    <item name="windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
</style>

我猜这种方式可以成功地覆盖主题


AppTheme.NoActionBar已经将AppTheme作为父主题进行声明。句号就是这么做的。 - Mehmet K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接