是否有这样的方法调用“getBackgroundColor”?

时间:2012-01-13 09:30:56

标签: android textview

在TextView中是否有这样的方法调用“getBackgroundColor”? 如果我在一个LinearLayout中有2个textViews:tv1和tv2。我做了什么:tv1.setBackgroundColor(Color.BLUE)

现在,如果我想将tv2的setBackgroundColor与tv1相同,我怎样才能首先获取tv1中的backgroundColor 然后再获取tv2的setBackgroundColor?

6 个答案:

答案 0 :(得分:36)

有比波旁士更好的解决方案:

((ColorDrawable)view.getBackground()).getColor();

优点是我们得到的整数与Color class给出的颜色枚举相当。

答案 1 :(得分:13)

设置背景颜色会将具有指定颜色的Drawable设置为背景,即以下示例将正常工作:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.some_layout_name);
    TextView t1 = (TextView) findViewById(R.id.text1);
    TextView t2 = (TextView) findViewById(R.id.text2);

    t1.setBackgroundColor(Color.GREEN);
    t2.setBackgroundDrawable(t1.getBackground());
}

答案 2 :(得分:11)

你会在这里找到解决方案: http://groups.google.com/group/android-developers/browse_thread/thread/4910bae94510ef77/59d4bb35e811e396?pli=1

会是这样的:

((PaintDrawable) tv.getBackground()).getPaint()

答案 3 :(得分:4)

没有这样的方法,因为共同现在有“背景颜色” - 可以有任何Drawable对象(例如图片)。所以,你应该记住你为文本设置的颜色。

如果您无法保存,请使用View.setTag()View.getTag()方法存储与视图相关联的任何值。

答案 4 :(得分:0)

这是一个额外的选项:

我为我的应用解决了这个问题的方法是在values / color.xml中定义颜色。

<resources>

    <color name="blue">#ff0099cc</color>
    <color name="dark_grey">#ff1d1d1d</color>
    <color name="white">#ffffffff</color>
    ...

    <color name="textview_background">@color/white</color>

</resources>

在布局中TextView有:

android:background="@color/textview_background"

如果我想在代码中获取背景颜色,我可以使用:

getResources().getColor(R.color.textview_background)

这直接为我提供了一个Color对象,而不用担心从Drawable获取颜色。

答案 5 :(得分:0)

它对我有用。

public static int getColor(View v) {
    if(Build.VERSION.SDK_INT>=11)
    {
        return ((ColorDrawable)v.getBackground()).getColor();
    }
    else
    {
       try
       {
        Field f=View.class.getDeclaredField("mState");
        f.setAccessible(true);
        Object mState=f.get(v);
        Field f2=mState.getClass().getDeclaredField("mUseColor");
        f2.setAccessible(true);
        return (int) f2.get(mState);
       }
       catch (Exception e)
       {

       }
    }
    return 0;
}