Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 获取具有ShapeDrawable的textView背景色_Android_Textview_Background Color_Shapedrawable - Fatal编程技术网

Android 获取具有ShapeDrawable的textView背景色

Android 获取具有ShapeDrawable的textView背景色,android,textview,background-color,shapedrawable,Android,Textview,Background Color,Shapedrawable,我有一个文本视图,背景在xml文件中定义 <TextView android:id="@+id/event_tvColor" android:layout_width="40dip" android:layout_height="40dip" android:text=" " android:background="@drawable/et_sty

我有一个文本视图,背景在xml文件中定义

          <TextView
            android:id="@+id/event_tvColor"
            android:layout_width="40dip"
            android:layout_height="40dip"
            android:text="   "
            android:background="@drawable/et_style_color_service_edit"
            android:clickable="true"
          />

           xml file :  et_style_color_service_edit.xml

            <?xml version="1.0" encoding="UTF-8"?>
              <shape xmlns:android="http://schemas.android.com/apk/res/android" 
                    android:shape="oval">        
                 <solid android:color="@color/eventColor"/>
                 <stroke android:width="0sp" android:color="#FFFFFF" />
                 <size android:width="20dp"
                       android:height="20dp"/>
              </shape>
请注意,我需要使用ShapeDrawable而不是GradientDrawable。 谢谢你的帮助和时间

解决方案

        Solution The xml loads into the app as a gradientdrawable and not as a shapedrawable. We have to define the shapeDrawable in java 

          ShapeDrawable sd = new ShapeDrawable(new RectShape);  
          sd.getPaint().setColor(0xFF0000FF); 

如果有谁有更好的解决方案可以告诉你。

经过进一步的研究,目前还没有办法让xml加载ShapeDrawable的颜色。您需要做的只是跟踪颜色变化,以便知道要将其设置为什么颜色,即:

int currentColor = Color.WHITE; //this is the default color (color set in xml)

public void changeColor() {
    if (currentColor == Color.WHITE) {
        currentColor = Color.BLUE;
    } else {
        currentColor = Color.WHITE;
    }
    GradientDrawable gd = (GradientDrawable)tvColor.getBackground();
    gd.setColor(currentColor);
}

经过进一步的研究,目前还没有办法获得xml加载的ShapeDrawable的颜色。您需要做的只是跟踪颜色变化,以便知道要将其设置为什么颜色,即:

int currentColor = Color.WHITE; //this is the default color (color set in xml)

public void changeColor() {
    if (currentColor == Color.WHITE) {
        currentColor = Color.BLUE;
    } else {
        currentColor = Color.WHITE;
    }
    GradientDrawable gd = (GradientDrawable)tvColor.getBackground();
    gd.setColor(currentColor);
}

你好,泽德·西奥。谢谢你的回复。我尝试ShapeDrawable sc=(ShapeDrawable)tvColor.getBackground();int color=sc.getPaint().getColor()。但是给我一个错误。java.lang.ClassCastException:android.graphics.drawable.GradientDrawable不能强制转换为android.graphics.drawable.ShapeDrawable…我不理解,因为xml文件中的元素用于ShapeDrawable和GradientDrawable。。。。。有什么想法吗?根据,xml作为gradientdrawable加载到应用程序中。我的建议是在java中设置ShapeDrawable,然后将其设置为EditTextI不理解“在java中设置ShapeDrawable”。你能给我举个例子zed scio吗?非常感谢您的帮助解决方案,xml将作为gradientdrawable而不是shapedrawable加载到应用程序中。我们必须在java shapeDrawable sd=newshapedrawable(newrectshape)中定义shapeDrawable;sd.getPaint().setColor(0xFF0000FF);如果有人有更好的解决方案,你可以告诉我……你好,泽德·西奥。谢谢你的回复。我尝试ShapeDrawable sc=(ShapeDrawable)tvColor.getBackground();int color=sc.getPaint().getColor()。但是给我一个错误。java.lang.ClassCastException:android.graphics.drawable.GradientDrawable不能强制转换为android.graphics.drawable.ShapeDrawable…我不理解,因为xml文件中的元素用于ShapeDrawable和GradientDrawable。。。。。有什么想法吗?根据,xml作为gradientdrawable加载到应用程序中。我的建议是在java中设置ShapeDrawable,然后将其设置为EditTextI不理解“在java中设置ShapeDrawable”。你能给我举个例子zed scio吗?非常感谢您的帮助解决方案,xml将作为gradientdrawable而不是shapedrawable加载到应用程序中。我们必须在java shapeDrawable sd=newshapedrawable(newrectshape)中定义shapeDrawable;sd.getPaint().setColor(0xFF0000FF);如果有人有更好的解决方案,你可以告诉我。。。。