在Android中管理不同设备的软底条时出现问题

在Android中管理不同设备的软底条时出现问题,android,android-layout,statusbar,android-statusbar,window-soft-input-mode,Android,Android Layout,Statusbar,Android Statusbar,Window Soft Input Mode,我创建了一个函数,如下所示,用于设置fitSystemWindow属性: private void setFitSystemWindows() { try { if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP) { // Do something for lollipop and above versions

我创建了一个函数,如下所示,用于设置fitSystemWindow属性:

private void setFitSystemWindows() {
        try {
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.LOLLIPOP) {
                // Do something for lollipop and above versions
                View view = findViewById(R.id.relRoot);
                view.setFitsSystemWindows(true);
                view.setPadding(0, 0, 0, 0);

                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
                window.setStatusBarColor(ContextCompat.getColor(CameraActivity.this, R.color.colorBlackTransperent));
            } else {
                // do something for phones running an SDK before lollipop
                View view = findViewById(R.id.relRoot);
                view.setFitsSystemWindows(false);
                view.setPadding(0, 0, 0, 0);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
让我解释一下:

这里,
R.id.relRoot
是布局xml文件中的父根
RelativeLayout

我首先检查构建版本,如果构建版本大于棒棒糖,我会将
fitsystemwindows
设置为
true
,如果不是,则将其设置为
false

但是,当我在devices>Lollipop中运行应用程序时,我的状态栏颜色为白色底部软视图(其中包含back、home和recent)也使用白色

您可以看到,我也在使用方法
setStatusBarColor
,但它不起作用

可能是什么问题


注意:我正在检查模拟器设备:NEXUS 5X API 27(Android 8.1.0,API 27)好吧,我试过你的代码,它对我有效。 所以我可以试着分析你的代码片段

  • 调试器说什么? 你试过在方法旁边做标记吗?调试器去哪里了?也许调试器出于某种原因跳入异常

  • 如果:

  • if(android.os.Build.VERSION.SDK\u INT>android.os.Build.VERSION\u code.LOLLIPOP){
    //为棒棒糖和更高版本做点什么
    }
    
    您不是在寻找棒棒糖及以上版本,而是在寻找除棒棒糖以外的版本。如果你还想找棒棒糖,请使用
    =

  • 检查颜色。 您是否尝试设置其他颜色(没有透明度)

  • 上下文。您是否尝试过
    getApplicationContext()
    或类似的工具

  • 我建议您使用调试器来查找问题。也许是代码的问题,也许是颜色的问题。
    正如我所说,我试过你的代码,它对我有效。

    嗯,我试过你的代码,它对我有效。 所以我可以试着分析你的代码片段

  • 调试器说什么? 你试过在方法旁边做标记吗?调试器去哪里了?也许调试器出于某种原因跳入异常

  • 如果:

  • if(android.os.Build.VERSION.SDK\u INT>android.os.Build.VERSION\u code.LOLLIPOP){
    //为棒棒糖和更高版本做点什么
    }
    
    您不是在寻找棒棒糖及以上版本,而是在寻找除棒棒糖以外的版本。如果你还想找棒棒糖,请使用
    =

  • 检查颜色。 您是否尝试设置其他颜色(没有透明度)

  • 上下文。您是否尝试过
    getApplicationContext()
    或类似的工具

  • 我建议您使用调试器来查找问题。也许是代码的问题,也许是颜色的问题。
    正如我所说,我尝试了你的代码,它对我很有效。

    这里我使用我已经实现的这个函数设置状态栏颜色。 在棒棒糖中,我将状态栏设置为黑色。在上面的版本中,我已经设置了我的应用程序主题颜色

    功能:-

    fun setStatusBarColor(activity: Activity, color: Int) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                activity.window.statusBarColor = ContextCompat.getColor(activity, color)
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) {
                    activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.black)
                }
            }
        }
    
    public void setStatus(Activity activity, int color){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, color));
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1)
                    activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, android.R.color.black));
            }
        }
    
    注意:-我在kotlin中实现了上述功能

    Java函数:-

    fun setStatusBarColor(activity: Activity, color: Int) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                activity.window.statusBarColor = ContextCompat.getColor(activity, color)
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) {
                    activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.black)
                }
            }
        }
    
    public void setStatus(Activity activity, int color){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, color));
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1)
                    activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, android.R.color.black));
            }
        }
    

    在这里,我使用我已经实现的这个函数设置状态栏颜色。 在棒棒糖中,我将状态栏设置为黑色。在上面的版本中,我已经设置了我的应用程序主题颜色

    功能:-

    fun setStatusBarColor(activity: Activity, color: Int) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                activity.window.statusBarColor = ContextCompat.getColor(activity, color)
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) {
                    activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.black)
                }
            }
        }
    
    public void setStatus(Activity activity, int color){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, color));
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1)
                    activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, android.R.color.black));
            }
        }
    
    注意:-我在kotlin中实现了上述功能

    Java函数:-

    fun setStatusBarColor(activity: Activity, color: Int) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                activity.window.statusBarColor = ContextCompat.getColor(activity, color)
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1) {
                    activity.window.statusBarColor = ContextCompat.getColor(activity, android.R.color.black)
                }
            }
        }
    
    public void setStatus(Activity activity, int color){
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
                activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, color));
                if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP || Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP_MR1)
                    activity.getWindow().setStatusBarColor(ContextCompat.getColor(activity, android.R.color.black));
            }
        }
    

    如果要删除状态栏,请将活动设置为全屏活动。如果要删除状态栏,请将活动设置为全屏活动。