【问题标题】:How to set background color of a View如何设置视图的背景颜色
【发布时间】:2011-01-11 13:11:21
【问题描述】:

我正在尝试设置视图(在本例中为按钮)的背景颜色。

我使用这个代码:

// set the background to green
v.setBackgroundColor(0x0000FF00 );
v.invalidate();

它会导致按钮从屏幕上消失。我做错了什么,在任何视图上更改背景颜色的正确方法是什么?

谢谢。

【问题讨论】:

  • 看起来是正确的。事实上,我认为你不需要调用 invalidate()。当您说按钮消失时,您的意思是字面意思还是按钮上的文字或图像消失了?

标签: android view colors background set


【解决方案1】:

什么是改变的正确方法 任何视图的背景颜色?

任何 View?你所拥有的是正确的,但你应该放弃invalidate() 电话。

不过,有些Views 已经有背景了。例如,Button 已经有背景:按钮本身的表面。这个背景是StateListDrawable,您可以在您的Android SDK 安装中的android-2.1/data/res/drawable/btn_default.xml 中找到它。反过来,这指的是一堆九块位图图像,可用于多种密度。您需要克隆和修改所有这些以实现您的绿色目标。

简而言之,您最好找到另一种 UI 模式,而不是尝试更改 Button 的背景。

【讨论】:

  • 好的,感谢您对按钮背景的解释。九个补丁位图 (developer.android.com/reference/android/graphics/NinePatch.html) 对我来说是新的。我只是想在按下按钮时更改屏幕上任何内容的颜色。按钮位于 TextView 上。试图改变它的颜色,会导致控制台消息“DDM dispatch reg wait timeout ... ActivityManager: Can't dispatch DDM chunk 52454151: no handler defined”和屏幕上的对话框“应用程序意外停止”。我想我需要在 UI 上做更多的阅读。欢迎任何提示。谢谢。
【解决方案2】:

question 讨论了更改视图的背景颜色。在其中一个答案中,该人解释了如何在运行时更改背景颜色。显然,您将研究如何修改屏幕上的其他对象,但这应该会给您一个良好的开端,至少允许您在单击按钮时修改视图的背景颜色。

【讨论】:

    【解决方案3】:
    // set the background to green
    v.setBackgroundColor(0x0000FF00 );
    v.invalidate();
    

    代码没有将按钮设置为绿色。相反,它使按钮完全不可见。

    解释:颜色的十六进制值错误。 Alpha 值为零时,颜色将不可见。

    对于完全不透明的绿色,正确的十六进制值是 0xFF00FF00。任何介于 00 和 FF 之间的 Alpha 值都会导致透明度。

    【讨论】:

      【解决方案4】:

      当您调用 setBackgoundColor 时,它会覆盖/删除任何现有的背景资源,包括任何边框、角落、填充等。 您要做的是更改现有背景资源的颜色...

      View v;
      v.getBackground().setColorFilter(Color.parseColor("#00ff00"), PorterDuff.Mode.DARKEN);
      

      用 PorterDuff.Mode.* 试验不同的效果。

      【讨论】:

      • “覆盖/删除任何现有的后台资源”,并非如此。
      • 我必须将上述内容与 v.invalidate();在下一行。
      • 尝试了这个浪费的时间并接受了答案,v.getBackground() 给出了空指针异常并崩溃了。
      • 这加上 PorterDuff.Mode.SRC_IN 为我解决了,所以我不会丢失我的背景边框。
      【解决方案5】:

      您使按钮透明。第一个字节是 alpha。

      试试v.setBackgroundColor(0xFF00FF00);

      【讨论】:

      • EddieB 在下面的回答要好得多,因为这会删除任何边框等,例如 EditText 的下划线
      • @aroth 更好 Color.Green ?如果我想要带有 argb 的颜色复杂度? ...您的答案已被弃用
      • @delive - 再来一次? Color.GREEN弃用,并包含 alpha 字节。它的值是0xff00ff00完全与答案中建议的相同,除了它还具有人类可读的好处。大多数开发人员更喜欢人类可读的解决方案。
      • 当你想在你的colors.xml中引用一种颜色时,你在括号之间写什么?
      【解决方案6】:

      执行此操作的几种选择...

      将背景设置为绿色:

      v.setBackgroundColor(0x00FF00);
      

      使用Alpha将背景设置为绿色:

      v.setBackgroundColor(0xFF00FF00);
      

      使用 Color.GREEN 常量将背景设置为绿色:

      v.setBackgroundColor(Color.GREEN);
      

      将背景设置为Colors.xml中定义的绿色

      <?xml version="1.0" encoding="utf-8"?>
      <resources>     
          <color name="myGreen">#00FF00</color> 
          <color name="myGreenWithAlpha">#FF00FF00</color> 
      </resources>
      

      并使用:

      v.setBackgroundResource(R.color.myGreen);
      

      和:

      v.setBackgroundResource(R.color.myGreenWithAlpha);
      

      或更长的时间:

      v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreen));
      

      和:

      v.setBackgroundColor(ContextCompat.getColor(getContext(), R.color.myGreenWithAlpha));
      

      【讨论】:

      • getResources().getColor(...) 已弃用 stackoverflow.com/questions/31842983/…
      • 还有:v.setBackgroundResource(R.color.myGreen);当使用colors.xml
      • 删除了 invalidate 调用,因为您可以使用 see setBackground... 方法已经调用它。
      • v.setBackgroundColor(0x00FF00); 只是他们说不起作用的代码。我也希望它是透明的。
      【解决方案7】:

      您可以将十六进制颜色设置为任何资源:

      View.setBackgroundColor(Color.parseColor("#e7eecc"));
      

      【讨论】:

        【解决方案8】:

        对于设置在屏幕上看到的第一种颜色,您也可以在相关的 layout.xml 中通过将这个属性添加到相关的 View 中来实现(更好的设计):

        android:background="#FF00FF00"
        

        【讨论】:

        • 问题清楚地表明颜色变化需要是动态的。
        【解决方案9】:

        你可以简单地使用:

        view.setBackgroundColor(Color.parseColor("#FFFFFF"));
        

        【讨论】:

          【解决方案10】:

          尝试添加:

          setBackgroundColor(Color.parseColor("#FF0000"));
          

          【讨论】:

            【解决方案11】:

            我在 API min 16 使用,目标 23

            Button WeekDoneButton = (Button) viewWeeklyTimetable.findViewById(R.id.week_done_button);
            
            WeekDoneButton.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorAccent));
            

            【讨论】:

            【解决方案12】:

            Android 6 使用 ContextCompact 声明

                    view.setBackgroundColor( ContextCompat.getColor(this, R.color.your_color));
            

            【讨论】:

              【解决方案13】:
              mButton.setBackgroundColor(getResources().getColor(R.color.myColor));
              

              【讨论】:

                【解决方案14】:

                你可以简单地使用:

                view.setBackgroundColor(Color.rgb(0, 198, 255));
                

                【讨论】:

                  【解决方案15】:
                  view.setBackgroundColor(R.color.primaryColor);
                  

                  为先前的颜色值添加颜色,所以我有不同的颜色。

                  对我有用的是:

                  view.setBackgroundResource(R.color.primaryColor);
                  

                  【讨论】:

                    【解决方案16】:

                    假设我们在values=&gt;colors.xml 中有一个原色

                    <resources>
                        <color name="primary">#FDD835</color>
                    </resources>
                    

                    所以如果我们想在setBackgroundColor(@ColorInt int Color) 中使用我们的自定义颜色,那么我们只需要一个带有构造函数/方法的注释@SuppressLint("ResourceAsColor"),它将用作:

                        @SuppressLint("ResourceAsColor")
                        public _LinearLayout(Context context) {
                            super(context);
                    
                            // Formatting our layout : )
                            super.setBackgroundColor(R.color.primary);
                    
                            ....
                    
                    
                        }
                    

                    【讨论】:

                      【解决方案17】:

                      您必须在参数中传递int

                      第一个例子:

                      view.setBackgroundColor(-500136)
                      

                      第二个例子:

                      int colorId = R.color.green;
                      
                      view.setBackgroundResource(colorId);
                      

                      【讨论】:

                        【解决方案18】:

                        这应该可以正常工作:v.setBackgroundColor(0xFF00FF00);

                        【讨论】:

                          【解决方案19】:

                          kotlin 中你可以这样做:

                          val backgroundColor = R.color.whatever_color_you_like
                          view.setBackgroundColor(getColorCompat(backgroundColor))
                          

                          其中getColorCompat()是一个扩展函数:

                          /**
                           * Extension method to provide simpler access to {@link ContextCompat#getColor(int)}.
                           */
                          
                           fun Context.getColorCompat(color: Int) = ContextCompat.getColor(this, color)
                          

                          【讨论】:

                            【解决方案20】:

                            我尝试了以上所有方法。但我还没有达到我所需要的。这是我的尝试。 如果您使用 hexcode 作为颜色并希望将颜色设置为图像的背景,那么这是 kotlin 代码。

                            val bitmap = Bitmap.createBitmap(30, 30, Bitmap.Config.ARGB_8888)
                            val canvas = Canvas(bitmap)
                            val colorCode = "#ffffff"
                            canvas.drawColor(Color.parseColor(colorCode))
                            mImageViewLogo.setImageBitmap(bitmap)
                            

                            【讨论】:

                              【解决方案21】:

                              这对我有用

                              v.getBackground().setTint(Color.parseColor("#212121"));
                              

                              这样只会改变背景的颜色而不改变背景本身。这很有用,例如,如果您的背景是圆角的。

                              【讨论】:

                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2021-03-11
                                • 1970-01-01
                                • 2023-03-25
                                • 2017-11-17
                                • 2010-12-11
                                • 1970-01-01
                                相关资源
                                最近更新 更多