如何使用 DrawerLayout 在 ActionBar/Toolbar 上方和状态栏下方显示?

2023-12-02

我在新材料设计中看到过侧面导航规格您可以在操作栏上方和状态栏后面显示抽屉。我怎样才能实现这个?


框架和支持库中的新功能正是允许这样做。共有三块“拼图”:

  1. Using Toolbar这样您就可以将操作栏嵌入到视图层次结构中。
  2. Making 抽屉布局 fitsSystemWindows以便将其放置在系统栏后面。
  3. 禁用Theme.Material的正常状态栏颜色,以便 DrawerLayout 可以在那里绘制。

我假设您将使用新的 appcompat。

首先,您的布局应如下所示:

<!-- The important thing to note here is the added fitSystemWindows -->
<android.support.v4.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/my_drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <!-- Your normal content view -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <!-- We use a Toolbar so that our drawer can be displayed
             in front of the action bar -->
        <android.support.v7.widget.Toolbar  
            android:id="@+id/my_awesome_toolbar"
            android:layout_height="wrap_content"
            android:layout_width="match_parent"
            android:minHeight="?attr/actionBarSize"
            android:background="?attr/colorPrimary" />

        <!-- The rest of your content view -->

    </LinearLayout>

    <!-- Your drawer view. This can be any view, LinearLayout
         is just an example. As we have set fitSystemWindows=true
         this will be displayed under the status bar. -->
    <LinearLayout
        android:layout_width="304dp"
        android:layout_height="match_parent"
        android:layout_gravity="left|start"
        android:fitsSystemWindows="true">

        <!-- Your drawer content -->

    </LinearLayout>

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

然后在您的活动/片段中:

public void onCreate(Bundled savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Your normal setup. Blah blah ...

    // As we're using a Toolbar, we should retrieve it and set it
    // to be our ActionBar
    Toolbar toolbar = (...) findViewById(R.id.my_awesome_toolbar);
    setSupportActionBar(toolbar);

    // Now retrieve the DrawerLayout so that we can set the status bar color.
    // This only takes effect on Lollipop, or when using translucentStatusBar
    // on KitKat.
    DrawerLayout drawerLayout = (...) findViewById(R.id.my_drawer_layout);
    drawerLayout.setStatusBarBackgroundColor(yourChosenColor);
}

然后您需要确保 DrawerLayout 在状态栏后面可见。您可以通过更改 value-v21 主题来做到这一点:

值-v21/themes.xml

<style name="Theme.MyApp" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:windowTranslucentStatus">true</item>
</style>

笔记: 如果一个<fragment android:name="fragments.NavigationDrawerFragment">被用来代替

<LinearLayout
    android:layout_width="304dp"
    android:layout_height="match_parent"
    android:layout_gravity="left|start"
    android:fitsSystemWindows="true">

    <!-- Your drawer content -->

</LinearLayout>

实际布局,调用即可达到想要的效果fitsSystemWindows(boolean)您返回的视图onCreateView method.

@Override
public View onCreateView(LayoutInflater inflater, 
                         ViewGroup container,
                         Bundle savedInstanceState) {
    View mDrawerListView = inflater.inflate(
        R.layout.fragment_navigation_drawer, container, false);
    mDrawerListView.setFitsSystemWindows(true);
    return mDrawerListView;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 DrawerLayout 在 ActionBar/Toolbar 上方和状态栏下方显示? 的相关文章

  • 服务如何在后台运行 - Android

    今天的采访中我被问到了这个问题 什么是服务 我对此的回答是 Service 是 Android 的基本组件 它没有 UI 并且在后台运行 Service 是否在主线程上运行 不 那么它是如何在后台运行的呢 我心里一片空白 有人可以解释一下如
  • AIRPLANE_MODE 的广播接收器无法与 SDK 26 一起使用

    通常 我使用简单的代码来放置Toast当用户改变AIRPLANE MODE 并且它可以使用targetSdkVersion 25 我的 AirPlaneModeReceiver public class AirPlaneModeReceiv
  • 升级到 Proguard 4.8 后无法导出应用程序

    我刚刚将我的 Android SDK ADT 和 Proguard 升级到最新最好的版本 我的项目在调试模式下编译并运行良好 但是当我尝试导出它的签名版本 APK 时 我收到来自导出向导的错误Eclipse 控制台上没有任何错误日志消息 如
  • 清晰的图标 清晰的 Android 应用程序

    你好 下午好 关于如何提高图标的 png 质量 有什么想法吗 我使用了 Android 开发者页面上的套件 但我无法获得清晰的图像 我的意思是非常清晰 我是否需要以不同的方式加载此图标 而不仅仅是拖入我的布局 谢谢 我使用这个布局
  • 如何最大限度地减少 Google API(地点)自动完成的请求量?

    我正在使用 google API 位置来自动完成位置AutoCompleteTextView 我做了几次测试 大概进行了 20 次搜索 在我的 google devs 个人资料中 写着我已经发出了 200 个 API 请求 据我所知 每次我
  • 构建应用程序时出现 BufferOverflowException

    每次我想运行我的 Android 应用程序时 我都会收到错误 2013 11 02 13 05 36 Dex Loader Unable to execute dex java nio BufferOverflowException Che
  • 在活动启动期间优雅地处理屏幕方向变化

    我正在尝试找到一种方法来正确处理设置活动 其中活动的方向是根据启动它的意图中的数据确定的 这是一款用户可以选择关卡的游戏 其中一些是纵向的 一些是横向的 我面临的问题是setRequestedOrientation ActivityInfo
  • 在 Android 中使用 AES 加密的最佳实践是什么?

    我为什么问这个问题 我知道人们对 AES 加密存在很多疑问 即使对于 Android 也是如此 如果您在网络上搜索 会发现很多代码片段 但在每个页面上 在每个 Stack Overflow 问题中 我都发现了另一个具有重大差异的实现 所以我
  • 片段活动中的 commitAllowingStateLoss()

    我的应用程序使用片段活动 它仅处于纵向模式 无法旋转屏幕 最初我使用的是commit 方法 但现在我计划不加区别地将这些更改为commitAllowingStateLoss 对于碎片活动 是否有任何理由不不加区别地执行此操作而不重新评估我使
  • 通过配置更改保留 CoroutineScope 的干净方法,无需 ViewModel

    我知道建议是在我们的 Activity 中使用 ViewModel 这样我们就可以使用它viewModelScope 由于 ViewModel 的寿命比 Activity 的寿命长 因此我们不必取消以下作业activity onDestro
  • 使用 twitter API 1.1 在 Android 应用程序中显示 twitter feed

    基本上我想展示这个提要 https en twitter com epl live https en twitter com epl live在我的应用程序中 由于 twitter 更改了其 api 1 1 每个调用都必须经过授权 我发现的
  • DialogFragment 关闭事件

    我需要处理 DialogFragment 的结尾 在调用 dismiss 之后 例如 我会在关闭后 包含 片段的活动内显示一个 toast 我该如何处理该事件 覆盖onDismiss 在你的DialogFragment中 或者使用setOn
  • Android 两个 Activity 之间的共享元素转换不起作用

    在我的应用程序中 我尝试使用新引入的活动之间共享的元素 如果共享元素具有固定位置 例如 android layout gravity top 但是当视图被锚定时问题就出现了 我的第一个活动如下所示
  • 如何获取Android中的所有主屏幕?

    我是安卓开发新手 我知道每个主屏幕都是启动器中的一个工作区 我想获取屏幕上所有应用程序图标的所有位置信息 那么有没有办法获取这些屏幕对象及其图标信息的列表 ADD 我更期待的是应用程序图标和屏幕之间的关系 例如 我想要某个应用程序图标的位置
  • 用户通过 firebase 动态链接安装应用程序并在应用程序抽屉上打开应用程序后,如何获得深层链接?

    我正在使用 firebase 动态链接邀请朋友使用我的应用程序 一切都很好 单击邀请链接会将我带到 Playstore 当我安装应用程序并等待其完成时 Playstore 会向我显示 继续 按钮 当我单击此按钮时 应用程序将打开 并且我会收
  • 活动中列表视图中的粘滞行

    我的列表视图中只有一行应该是粘性的 而不是粘性标题中带有字母的部分或部分 我真的很感激任何关于列表视图在活动中粘性一行而不是片段的帮助 我该怎么做 我真的很感谢任何帮助 提前致谢 使用如下代码 class MyAsyncTask exten
  • 致命异常:GoogleApiHandler

    在我的项目中 我使用货币化服务 Vungle AppLovin 当我尝试加载广告时 出现此异常 E AndroidRuntime 致命异常 GoogleApiHandler 进程 kz ikar PID 3673 java lang NoS
  • Android:我的应用程序太大并给出“无法执行 dex:方法 ID 不在 [0, 0xffff]: 65536”?

    我正在尝试将我的应用程序与 Box Dropbox 和 Google Drive 集成 所有这 3 项服务都需要许多第 3 方 jar 此外 我的应用程序已经需要一些第三方 jar 现在 当我尝试从 Eclipse 运行我的应用程序时 出现
  • AndroidAnnotations 和 Dagger

    我正在尝试使用 Dagger 注入 Android 带注释的 Activity java lang IllegalArgumentException No inject registered for members com app serv
  • 将主题应用到 v7 支持操作栏

    我正在使用support v7库来实现ActionBar在我的应用程序中 我的styles xml file

随机推荐

  • 复选框仅在子节点中?

    我有许多按类别分组的项目 节点 我想将它们显示在TreeView其中父级是文本 子级是CheckBoxes CategoryA Text A1 CheckBox A2 CheckBox CategoryB Text B1 B2 B3 Cat
  • jqGrid colmodel 在 loadComplete 中的更改

    经过 3 个小时的谷歌搜索后 我请求你的帮助 我的页面上有一个 jqGrid grid 的重要选项 listU05 jqGrid url u05json json datatype json mtype POST colModel name
  • Objective C 使用 JNI 调用 Java 方法

    有人可以告诉我如何从 Objective C 调用 Java 方法吗 更详细地说 这实际上是我想做的 1 首先从java端调用目标C 在此调用期间我想获得对java对象的引用 2 稍后我希望 Objective C 使用上一步中获得的引用来
  • Ember 1.10 中的助手损坏

    我正在使用自定义 Handlebars 助手来扩展 if 块的功能 在 Ember 1 10 中 这不再起作用 因为没有允许绑定到该属性的 Ember Handlebars bind 属性 Ember Handlebars register
  • 如何为给定数组创建跨度列表

    假设我有一个看起来像这样的对象 var users user1 user2 对于这个对象 我想创建一个像这样的跨度列表 span user1 span span user2 span 我确实尝试了以下代码 span span text us
  • java 使用比较器和交换函数进行排序

    我需要使用自定义比较器和交换功能进行排序功能 我自己可以写一个 但我想知道是否其他人还没有这样做 Java运行时包含许多专门的排序函数 用于对基本类型 对象等数组进行排序 但它们都不以交换函数作为参数 谷歌搜索也没有找到任何有用的东西 pu
  • Sphinx 自动摘要生成的表中的自动换行

    我使用 Sphinx 为我的项目生成文档 扩展名为autosummary 它生成一个表 其中包含我的模块名称及其摘要 这是结果的图像 然而 行太长 我们必须使用滑块来阅读整个描述 我想将描述文本换行 以摆脱滑块 我到处寻找 却一无所获 我尝
  • AdvertisingIdClient.getAdvertisingIdInfo(context) 正在抛出 NoClassDefFoundError

    我正在尝试使用 AdvertisingIdClient 获取我的 AIR 应用程序的广告 ID 所以我确实喜欢AdvertisingIdClient Info adInfo AdvertisingIdClient getAdvertisin
  • 为什么使用 React Hook 表单时表单测试失败?

    我正在使用react hook form来构建一个表单 该表格运行良好 但测试未通过 当我不使用时测试通过react hook form然后直接提交
  • Hibernate批处理有什么用

    我是休眠新手 我对休眠批处理有疑问 我读了一些他们说的休眠批处理教程 Session session SessionFactory openSession Transaction tx session beginTransaction fo
  • Opera 的 DragonFly 和 Extensions 还会存在于 Webkit 世界中吗?

    我刚刚看到 Opera 将停止使用 Presto 并切换到 WebKit 那么 DragonFly 是否仍然存在 或者将被 Chrome Inspector 取代 扩展也怎么样 是的 蜻蜓歌剧院仍然存在 Opera 15 当前的测试版包括
  • 在 JavaScript 中将多个分号替换为单个分号

    我尝试在 javascript 中删除多个分号 替换为单个分号 code var test test1 test2 test3 test4 test5 test6 test7 test8 test9 test replace 但没有得到正确
  • 使用 RODBC 包将数据框导出到 SQL Server

    我在用RODBCR 中的包用于从 SQL Server 数据库导入 导出数据帧 虽然导入没有问题 我不知道如何将数据框的内容导出到现有的 SQL 表中 我正在尝试使用sqlQuery 包中提供了函数 但我不知道如何在表中插入多条记录 有关如
  • 缺少更新 GCloud 上静态 ReactJS 站点的步骤

    人们可能会认为简单地替换与应用程序关联的存储桶中的内容就会更新应用程序 但事实并非如此 I have a site that I deployed yesterday I created the bucket then in the com
  • 有没有办法检查 int 是否是 C# 中的合法枚举?

    我读过一些 SO 帖子 似乎缺少最基本的操作 public enum LoggingLevel Off 0 Error 1 Warning 2 Info 3 Debug 4 Trace 5 if s LogLevel log LogLeve
  • 如何让 Chrome 使用范围 http 标头在音频中进行搜索?

    尽管 可查找 数量声称为 100 但看起来 Chrome 在清理超过缓冲 加载持续时间时会从文件开头开始下载 我放置了一个演示页面 硬编码为存储在 s3 上的 59 分钟音频文件 但在其他方面与 jPlayer 演示相同 http beta
  • 文档在 NuGet 包中消失

    我用 C 编写了一个类库 需要将其推送到私有 NuGet 服务器 v3 4 1 0 我用 XML 文档注释装饰了我的类和方法 XML 文档文件选项被选中Build在项目属性面板的选项卡中 项目构建成功 并在项目的根文件夹中生成与程序集同名的
  • Python:可视化数据直方图上的正态曲线

    预先感谢您的任何帮助或提示 我正在尝试可视化我的数据框列之一的拟合法线 到目前为止 我已经能够通过以下方式绘制直方图 df radon adj hist bins 30 我有这个 template 但我遇到了错误 import pylab
  • 通过 Intent 共享照片时 EXIF 位置数据被删除

    我最近将我的应用程序切换到范围存储 但是 我注意到 当我从应用程序内共享图像 通过 Intent 时 GPS 位置数据将从图像的 Exif 元数据中删除 我知道范围存储对访问图像的 Exif 位置数据有一些限制 并且我知道该权限
  • 如何使用 DrawerLayout 在 ActionBar/Toolbar 上方和状态栏下方显示?

    我在新材料设计中看到过侧面导航规格您可以在操作栏上方和状态栏后面显示抽屉 我怎样才能实现这个 框架和支持库中的新功能正是允许这样做 共有三块 拼图 Using Toolbar这样您就可以将操作栏嵌入到视图层次结构中 Making 抽屉布局