如何设置drawer layout覆盖状态栏之上 android

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何设置drawer layout覆盖状态栏之上 android相关的知识,希望对你有一定的参考价值。

参考技术A 造成android的SE已禁用有如下原因:1.是自己刷机后没有wipe,双清。或手机在线ota升级后没有自动双清,导致系统缓存混乱,所以报错。2.是用了某些同步工具,同步联系人,短信,通话记录,相册等导致的错乱问题。3.SIM卡上存储的信息问题。4.比如删除了系统必备apk,或者是替换了不同版本的apk,导致的错误。建议按照以下方法操作:1.手机中是否安装手机安全卫士软件或者一些第三方软件程序,如果有请卸载尝试。2.建议把机器恢复出厂设置,操作如下:设置-重置/隐私权/私人-恢复出厂3.建议固件升级尝试。(设置-关于设备-系统更新)

每当我覆盖UserInterfaceStyle时如何更改状态栏颜色

【中文标题】每当我覆盖UserInterfaceStyle时如何更改状态栏颜色【英文标题】:How to change Status bar colour whenever I overrideUserInterfaceStyle 【发布时间】:2021-12-29 10:23:34 【问题描述】:

设置:

斯威夫特 5.5, Xcode 13.2

这个话题遍布网络,这里是one of them。好吧,我的应用有三个选项:

开:无论系统设置如何,都使用暗模式 关闭:无论系统设置如何,都使用灯光模式 系统:使用系统默认值(浅色或深色)

我有一个简单的类可以切换三个:

import SwiftUI

class Utilities: ObservableObject 

    // The default is to use the system's default.
    @AppStorage("theme") var theme: String = ""
    
    var userInterfaceStyle: ColorScheme? = .dark

    func overrideDisplayMode() 
        var userInterfaceStyle: UIUserInterfaceStyle

        if theme == "On" 
            userInterfaceStyle = .dark
         else if theme == "Off" 
            userInterfaceStyle = .light
         else 
            // System
            userInterfaceStyle = .unspecified
        
        
        let scenes = UIApplication.shared.connectedScenes
        let windowScene = scenes.first as? UIWindowScene
        let window = windowScene?.windows.first
        
        window?.overrideUserInterfaceStyle = userInterfaceStyle
        
    


它是如何更新的(减去按钮功能等):


@main
struct MainApp: App 
   @StateObject var utilities = Utilities()

  var body: some Scene 
    WindowGroup 
       ContentView()
       .onChange(of: utilities.theme, perform:  _ in
         utilities.overrideDisplayMode()
       )
       
       // Ensures the theme is set when app first loads
       .onAppear(perform: 
          utilities.overrideDisplayMode()
       
    
  


这很好用:主题化。唯一的问题是状态栏。每当我 overrideUserInterfaceStyletheme 更改时,我都想更改状态栏颜色。我怎样才能通过这种设置实现这一点?

【问题讨论】:

【参考方案1】:

这很简单。在 Apple 的 UIApplication.h 里面我看到了

public enum UIStatusBarStyle : Int 

    
    case `default` = 0 // Automatically chooses light or dark content based on the user interface style

    @available(iOS 7.0, *)
    case lightContent = 1 // Light content, for use on dark backgrounds

    @available(iOS 13.0, *)
    case darkContent = 3 // Dark content, for use on light backgrounds

对我来说,关键部分是:

case default = 0 // 根据用户界面风格自动选择浅色或深色内容

所以继续:


[..]
func overrideDisplayMode() 
   [..]
        
    window?.overrideUserInterfaceStyle = userInterfaceStyle
    UIApplication.shared.statusBarStyle = .default // <-- THIS
        
 

“这个”不起作用,所以我做了一个完整的改变:

[..]

func overrideDisplayMode() 
    var userInterfaceStyle: UIUserInterfaceStyle
    // New
    var barStyle: UIStatusBarStyle

    if theme == "On" 
        userInterfaceStyle = .dark
        // New
        barStyle = .lightContent
     else if theme == "Off" 
        userInterfaceStyle = .light
        // New
        barStyle = .darkContent
     else 
        userInterfaceStyle = .unspecified
        // New
        barStyle = .default
    
    
    let scenes = UIApplication.shared.connectedScenes
    let windowScene = scenes.first as? UIWindowScene
    let window = windowScene?.windows.first
    
    window?.overrideUserInterfaceStyle = userInterfaceStyle
    // New
    UIApplication.shared.statusBarStyle = barStyle
    

然后在info.plist

查看基于控制器的状态栏外观:否

虽然此更改有效,但我收到了 iOS 13 的弃用警告:

'statusBarStyle' 在 iOS 13.0 中已弃用:改用窗口场景的 statusBarManager 属性。

我不知道如何使用 statusBarManager,但现在,我稍后会弄清楚那部分。

【讨论】:

以上是关于如何设置drawer layout覆盖状态栏之上 android的主要内容,如果未能解决你的问题,请参考以下文章

我可以只为状态栏设置 FLAG_LAYOUT_NO_LIMITS 吗?

原创+译文官方文档中声明的如何创建抽屉导航栏(Navigation Drawer)

如何在 Drawer - Material UI 中将 MenuItem 设置为活动状态?

android页面布局:如何使LinearLayout层占满页面,但不覆盖底部菜单栏?

旋转视图时如何在ios 7中停止状态栏覆盖ping

Swift uiview 在 uitable 之上