java 为什么 Android Studio 总是在应用设计中显示 ActionBar,即使被禁用?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/32909364/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 20:57:45  来源:igfitidea点击:

Why does Android Studio always show ActionBar in app design, even when disabled?

javaandroidxmlandroid-layoutandroid-studio

提问by michnovka

I have an application in new Android Studio 1.4 (nonetheless this issue was present at 1.3.2 as well) and I have decided to go with toolbar instead of actionbar because of the extended features.

我在新的 Android Studio 1.4 中有一个应用程序(尽管这个问题在 1.3.2 中也存在),并且由于扩展功能,我决定使用工具栏而不是操作栏。

I have set both xml and java accordingly to hide actionbar, and when compiled, it is not present, instead the toolbar is on top where ActionBar would appear. But in design view I still see it and there is no way to remove it. This bothers me, as it hides some of the designing area and I dont have enough space for all my elements.

我已经相应地设置了 xml 和 java 以隐藏操作栏,并且在编译时它不存在,而是工具栏位于 ActionBar 出现的顶部。但是在设计视图中我仍然看到它并且无法将其删除。这让我很困扰,因为它隐藏了一些设计区域,而且我没有足够的空间来放置我的所有元素。

How to remove the ActionBar (1) and have it replaced with toolbar (2) in Android Studio design, so that (3) has full height.

如何在 Android Studio 设计中移除 ActionBar (1) 并将其替换为工具栏 (2),以便 (3) 具有全高。

Android Stdui XML design

Android Stdui XML 设计

Here are my xml and java files, looks like a lot but they are 90% default values. I set AppTheme theme in styles.xml which is derived from Theme.AppCompat.Light.DarkActionBar and in manifest I tell compiler to use AppTheme.NoActionBar for activity theme.

这是我的 xml 和 java 文件,看起来很多,但它们是 90% 的默认值。我在从 Theme.AppCompat.Light.DarkActionBar 派生的 style.xml 中设置 AppTheme 主题,在清单中我告诉编译器使用 AppTheme.NoActionBar 作为活动主题。

activity_unlock.xml

活动_unlock.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent" android:fitsSystemWindows="true"
    tools:context="com.example.testapp.UnlockActivity">

    <android.support.design.widget.AppBarLayout android:layout_height="wrap_content"
        android:layout_width="match_parent" 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="@android:color/white" app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_unlock" />


</android.support.design.widget.CoordinatorLayout>

content_unlock.xml

content_unlock.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
    android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:showIn="@layout/activity_unlock" tools:context="com.example.testapp.UnlockActivity">

</RelativeLayout>

UnlockActivity.java

解锁Activity.java

package com.example.testapp;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;

public class UnlockActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_unlock);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
    }

}

Android Manifest

安卓清单

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.testapp">

    <application>
        <activity android:name="com.example.testapp.UnlockActivity"
                    android:label="@string/title_activity_unlock"
                android:theme="@style/AppTheme.NoActionBar"
>
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
        </activity>
    </application>
</manifest>

styles.xml

样式文件

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowNoTitle">true</item>
        <!--We will be using the toolbar so no need to show ActionBar-->
        <item name="android:windowActionBar">false</item>
        <!-- Set theme colors from http://www.google.com/design/spec/style/color.html#color-color-palette-->

    </style>
    <style name="AppTheme.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

</resources>

采纳答案by michnovka

This was quite easy in the end. I just changed styles.xmlfrom

这最终很容易。我只是改变了styles.xml

 <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">

to

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">

I have no idea why this affects designer view, as when launched, both versions provide identical layout without actionbar (as I use AppTheme.NoActionBarwhich is defined in styles.xml) I guess it is an Android Studio design rendering bug.

我不知道为什么这会影响设计器视图,因为在启动时,两个版本都提供相同的布局而没有操作栏(正如我AppTheme.NoActionBar在 中定义的那样styles.xml)我猜这是一个 Android Studio 设计渲染错误。

回答by Andrew Gallasch

As you may instantiate a layout in any number of ways with any style you can view how your layout looks in different styles by clicking the button as shown in the image. If you don't set another style or theme in your code then the theme in your manifest will be used.

由于您可以使用任何样式以多种方式实例化布局,因此您可以通过单击图像中所示的按钮来查看布局在不同样式下的外观。如果您没有在代码中设置其他样式或主题,则将使用清单中的主题。

enter image description here

在此处输入图片说明