【问题标题】:Change actionbar color programmatically more than once以编程方式多次更改操作栏颜色
【发布时间】:2013-06-09 05:48:14
【问题描述】:

我正在使用

getSherlockActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00ACED));

在片段中更改我的操作栏的颜色,它可以工作。但是,如果我打开这个片段然后打开另一个片段,该片段使用不同的颜色调用此方法,则操作栏不会更改为所需的颜色。相反,它变成了白色,而不是我设置的颜色。

【问题讨论】:

    标签: android


    【解决方案1】:

    这是我发现的一个快速修复

    mActionBar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
    mActionBar.setDisplayShowTitleEnabled(false);
    mActionBar.setDisplayShowTitleEnabled(true);
    

    【讨论】:

    • 这仅发生在我的一台设备上……该死的摩托罗拉 Xoom。但是,这解决了问题!就我而言,切换标题的显示需要反转,因为我没有显示开头的标题。
    • 我可以确认这也解决了 LG-P880g 上的问题。你我的朋友,太棒了!谢谢!
    • 我在使用支持操作栏时必须使用颜色资源。 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.swift)));
    • 现在 ActionBars 早已不复存在。现在每个人都使用工具栏
    • getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#363C54")));
    【解决方案2】:

    试试这个,

    方法一:

    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00FFED));
    

    方法二:

    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources()
                        .getColor(R.color.bg_color)));
    

    方法3:

    getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3A1212")));
    

    科特林

    supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this, android.R.color.black)))
    

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,answer from user1634451 工作了但只工作了一次(不会连续启用多个颜色开关)

      这绝对解决了它:

      bar.setBackgroundDrawable(new ColorDrawable(getResources()
                          .getColor(R.color.app_bar_online)));
      

      而不是直接链接到颜色做new ColorDrawable(R.color.app_bar_online)

      【讨论】:

      • 这就是我要找的:)
      • 我使用的是ContextCompat 而不是getResources,因为我使用的是支持库。此外,getResources().getColor(int) 现在已弃用。
      【解决方案4】:

      getColor 已弃用。使用 ContextCompat :

      bar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, R.color.app_bar_online)));
      

      【讨论】:

      • 谢谢。如果有人从颜色数组中选择颜色,请使用 bodyColor[index] 而不是 ContextCompat.getColor(context, R.color.app_bar_online)
      • 使用此解决方案,此时我收到 NullPointerException(甚至是来自 AS 的警告)。为什么?
      【解决方案5】:

      如果您想设置 ActionBar 的颜色并将颜色作为字符串,这似乎对我有用。

          getSupportActionBar().setBackgroundDrawable(
                  new ColorDrawable(Color.parseColor("#993b3c4e")));
      

      您可能必须启用和禁用标题才能使其正常刷新/显示,就像user1634451 给出的答案一样,但我不需要这样做。

      【讨论】:

        【解决方案6】:

        如果你想避免弃用,你可以使用

        val mActionBar: ActionBar? = supportActionBar    
        mActionBar.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this, R.color.red)))
        

        Kotlin 语言

        【讨论】:

          【解决方案7】:

          如果您想实用地更改操作栏颜色或背景,只需使用,

          if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                          getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.white_background));
                      }
          

          white_background.xml

          <shape xmlns:android="http://schemas.android.com/apk/res/android"
          android:shape="rectangle">
          <solid android:color="#fff" />
          

          【讨论】:

            【解决方案8】:

            ((AppCompatActivity) getActivity()).getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources().getColor(R.color.colorPrimary)));

            在片段和Java中

            【讨论】:

            • 请不要只写一段代码,而是试着解释它的作用以及它为什么会起作用。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多