实现导航抽屉后通知栏呈灰色

2024-06-28

我正在尝试学习 Android 中导航抽屉的实现。

在一项活动中,我将导航抽屉置于状态栏(透明)下方和应用栏上方,一切正常。(左屏幕截图)

在同一应用程序的另一个活动中,我试图创建在应用程序栏下方拉起的导航抽屉。但在这里,状态栏由于某种原因变成灰色(无论导航抽屉打开还是关闭)(右屏幕截图)。除此之外,一切似乎都很好。

下面是截图:

绿色导航抽屉是一个片段。

我想知道的是如何使状态正常(较暗的阴影)。请记住,如果我单击应用程序栏中的双箭头图标,它将带我到另一个活动,其中包含另一个导航抽屉,其工作方式类似于材质设计(屏幕的全高,位于透明状态栏下方)。这显示在屏幕截图的左侧。

下面是代码:

MainActivity.java:

public class MainActivity extends ActionBarActivity {
    Toolbar toolbar;
    DrawerLayout xDrawerLayout;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_alt);

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

        xDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        xDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.primary_dark));

        NavDrawerFragment mfragment = (NavDrawerFragment) getFragmentManager().findFragmentById(R.id.nav_drawer_fragment);
        mfragment.SetUp(xDrawerLayout, toolbar, R.id.nav_drawer_fragment);
    }
...

活动_替代.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <include
        android:id="@+id/app_bar"
        layout="@layout/app_bar" />


    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/hello_world" />

        </RelativeLayout>

        <fragment
            android:id="@+id/nav_drawer_fragment"
            android:name="com.rt.droid.mattest.NavDrawerFragment"
            android:layout_width="@dimen/nav_drawer_width"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            tools:layout="@layout/fragment_nav_drawer" />


    </android.support.v4.widget.DrawerLayout>

</LinearLayout>

NavDrawerFragment.java:

public class NavDrawerFragment extends Fragment {

    private ActionBarDrawerToggle mDrawerToggle;
    private DrawerLayout mDrawerLayout;
    public DrawerLearner yDrawerLearner;

    public NavDrawerFragment() {
        // Required empty public constructor
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View fView = inflater.inflate(R.layout.fragment_nav_drawer, container, false);
        //fView.setFitsSystemWindows(true);
        fView.setBackgroundColor(getResources().getColor(R.color.accent));
        return fView;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    public void SetUp(DrawerLayout drawerLayout, Toolbar toolbar, int frag_id) {
        this.mDrawerLayout = drawerLayout;
        View drawerFrag = getActivity().findViewById(frag_id);
        mDrawerToggle = new ActionBarDrawerToggle(getActivity(), mDrawerLayout, toolbar, R.string.drawer_open, R.string.drawer_close) {
            @Override
            public void onDrawerOpened(View drawerView) {
                super.onDrawerOpened(drawerView);
                getActivity().invalidateOptionsMenu();
            }

            @Override
            public void onDrawerClosed(View drawerView) {
                super.onDrawerClosed(drawerView);
                getActivity().invalidateOptionsMenu();
            }
        };

        yDrawerLearner = new DrawerLearner(mDrawerLayout, drawerFrag, getActivity());
        yDrawerLearner.execute();

        this.mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerLayout.setStatusBarBackgroundColor(getResources().getColor(R.color.primary_dark));

        mDrawerLayout.post(new Runnable() {
            @Override
            public void run() {
                mDrawerToggle.syncState();
            }
        });

    }
}

fragment_nav_drawer.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.rt.droid.mattest.NavDrawerFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="@string/hello_blank_fragment" />

</FrameLayout>

应用程序栏.xml:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/primary"
    app:popupTheme="@style/AppTheme.PopupMenu"
    android:theme="@style/AppTheme.Toolbar">

</android.support.v7.widget.Toolbar>

样式.xml:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
    </style>

    <style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="colorAccent">@color/accent</item>
    </style>

    <style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark">
        <item name="android:textColorPrimary">@color/primary_text</item>
        <item name="android:textColorSecondary">@color/accent</item>
    </style>

    <style name="AppTheme.PopupMenu" parent="ThemeOverlay.AppCompat.Dark">
        <item name="android:background">@color/accent</item>
    </style>

</resources>

样式.xml(v21):

<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <!-- Customize your theme here. -->
        <item name="android:colorPrimary">@color/primary</item>
        <item name="android:colorPrimaryDark">@color/primary_dark</item>
        <item name="android:colorAccent">@color/accent</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@android:color/transparent</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>

</resources>

Colors.xml(显示颜色样本的屏幕截图):

注意:我不想在样式等方面做出妥协,这会导致我的其他导航抽屉无法工作。换句话说,我更喜欢两种类型的导航栏在同一个应用程序中按预期工作的解决方案。

如果您需要任何信息,请告诉我,如果需要,我将进行编辑。 编辑:为了清晰起见,添加了 app_bar.xml 和colors.xml。


但在这里,状态栏由于某种原因变成了灰色

它是半透明(25% 黑色)状态栏背景,位于其下方活动的白色背景之上。

我想知道的是如何让状态正常

您需要为第二个活动禁用半透明状态栏。它由主题定义中的这一行激活:

<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>

因此,要么定义一个子主题并覆盖该标志false或者通过从您的活动中调用以下代码以编程方式清除该标志:

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    getWindow().setStatusBarColor(getResources().getColor(R.color.primary_dark);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实现导航抽屉后通知栏呈灰色 的相关文章

随机推荐

  • 在 WSO2 ESB 4.6 中访问已发布的 WS 代理时出错:找不到 EPR

    我在 4 5 1 和 4 6 中部署了完全相同的 WS proxy 在 4 5 1 中它可以正常工作 但在 4 6 中我得到 ERROR AxisEngine The endpoint reference EPR for the Opera
  • 如何解析日期格式?

    在我的应用程序正在使用的 Web 服务之一中 我遇到了以下日期时间格式 Date 1395780377459 这是某种标准的日期格式吗 如果是这样 如何将其解析为 DateTime 对象 EDIT 感谢您的评论 所以 Date 139578
  • 关闭 Quartz .Net 中的调试日志记录

    我正在使用 Quartz NET 在我们的应用程序中安排一些自定义任务 一切工作正常 只是它在一秒钟内记录大约二十个调试条目 我不知道如何关闭调试日志记录 任何帮助将非常感激 因为我一直试图在网上查找但没有运气 调试条目如下所示 DEBUG
  • 如何在 Rails 中为不在模型文件夹根目录中的模型定义工厂女孩?

    我想为我的服务器中的模型创建一个工厂女孩 该模型位于模型文件夹的文件夹内 我的树视图如下所示 app models xxx user rb spec factories xxx user rb 我的工厂女工长这样 FactoryGirl d
  • C++ 限制语义

    我正在更新性能关键库以使用限制 如 g 和 MSVC 在 C 11 中使用关键字实现的那样 restrict 这似乎是最标准的扩展 所以我将使用restrict and restrict可以互换 restrict是一个 C99 关键字 但编
  • 如何手动向我刚刚生成的进程发送消息?

    如何使用 Erlang 发送消息进行处理 我确实启动了一个进程 输出显示 pid 进程标识符 是 lt 0 39 0 gt 我的问题是如何向此进程发送消息 lt 0 39 0 gt 手动 While list to pid 1确实可以用来构
  • 直接将数据放入AppEngine的Blobstore中

    AppEngine 的标准 API 假定文件是从 HTML 表单上传的 我正在尝试从可由非 Html 客户端 Flash iPhone 等 调用的 REST API 方法将文件发布到 blobstore 我试图运行的代码 Get the b
  • .NET 进程在 Windows 7 中进行 DNS 查找失败

    我有一个应用程序在 Windows 7 下 DNS 查找 System Net Dns GetHostEntry 失败 该应用程序在 XP 下工作正常 生成的错误是套接字错误代码 11003 WSANO RECOVERY 11003这是一个
  • 无法加载动态库“php_wincache.dll”?

    因为我已经使用 ASP NET 所以我决定在 IIS 上使用 PHP 我使用 Wep PI 安装它 但是当我尝试安装 Composer 时 他失败并出现 PHP 设置错误 我尝试将 php ini 中的 extension dir 更改为绝
  • 指针类型与 PyArray_SimpleNew 不匹配

    我正在使用 C API 使用 Numpy 创建 Python 模块 并遇到与输出的奇怪的不兼容问题PyArray SimpleNew 我想了解一下 但首先是一个最小的例子 include
  • 集群故障转移

    我知道我问的是有关集群故障转移的一些非常明显的问题 我在 redis io 上读到 如果任何主集群节点发生故障 它将影响其他主节点 直到从属节点接管 在我的结构中 我没有定义任何奴隶 只是与 3 个主人一起工作 我正在考虑修改 redis
  • android中单例的问题

    我有一个 Android 应用程序 其中有几个活动 每个活动都会下载一个 xml json 提要 对其进行解析并将其推送到一个单例 通常作为数组列表 然而 在经历了各种活动之后 单例似乎正在消亡 并且大多数早期下载的数组列表现在都是空的 为
  • 如何将变量从命令行传递到 CMake Toolhain 文件?

    有没有办法在调用 cmake 时将变量传递给工具链文件 例如 我有以下工具链文件 message FOO FOO 我尝试过以下方法 但没有成功 该变量未在工具链文件中设置 cmake
  • pytest 在参数化中使用固定装置作为参数

    我想使用固定装置作为参数pytest mark parametrize或者会产 生相同结果的东西 例如 import pytest import my package pytest fixture def dir1 fixture retu
  • 如何自定义 django 管理更改页面以返回到“保存”时的特定 URL

    我想使用 django contrib admin 页面来编辑我的模型 但从我自己的视图中调用单独的更改页面 然后在用户单击 保存 后返回那里 理想情况下 这应该通过将返回 URL 附加到管理页面的 url 来实现 如 return url
  • Flask多参数从一个url查询数据库的多列时如何避免多个if语句

    我正在尝试使用 Flask 作为前端来构建一个会计数据库 主页是分类帐 有九列 日期 描述 借方 贷方 金额 帐户 参考 日记帐 和 年份 我需要能够每次查询一次两个 已有超过 8000 个条目 并且还在不断增加 到目前为止 我的代码显示了
  • AngularJS - 从 run 方法访问 ng-init 变量

    1 我在 ng init 中初始化了变量 例如 ng init password Mightybear 2 我想从 run方法访问它 例如 anguar module ngApp run function Access password h
  • 检查行是否存在,Laravel

    我有以下数据库结构 items id name user id users table id name user favorites table id user id item id 在我的项目永久链接页面上 我有一个 添加到收藏夹 按钮
  • asset_host 和相关协议 URL 更改为 http

    我的应用程序 Rails 4 0 0 的某些元素可通过 http 和 https 连接使用 因此我已将 asset host 配置为使用相对协议 url 这应该允许浏览器进行切换它希望从中获取资产的协议 config action cont
  • 实现导航抽屉后通知栏呈灰色

    我正在尝试学习 Android 中导航抽屉的实现 在一项活动中 我将导航抽屉置于状态栏 透明 下方和应用栏上方 一切正常 左屏幕截图 在同一应用程序的另一个活动中 我试图创建在应用程序栏下方拉起的导航抽屉 但在这里 状态栏由于某种原因变成灰