web-dev-qa-db-ja.com

Android:セレクターを使用して画像ビューの背景色を設定する

画像ビューの背景色を設定しようとしています。

 <ImageView 
     Android:id="@+id/my_image"
     Android:src="@drawable/my_icon"
     Android:layout_width="wrap_content"
     Android:layout_height="wrap_content"    
     Android:layout_weight="1"  
     Android:clickable="true" 
     Android:layout_alignParentLeft="true"
     Android:background="@drawable/selector_image_view" /> 

以下のセレクターを使用しています。

 <?xml version="1.0" encoding="utf-8"?> 
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">     
 <item Android:state_selected="true" Android:background="@color/Violet" />    
 <item Android:state_pressed="true" Android:background="@color/red" />
 <item Android:background="@color/white" />
 </selector>

しかし、ランタイム例外でセレクターを使用しようとするとクラッシュします。何が悪いのですか?

私のlogcat

E/AndroidRuntime( 4196): FATAL EXCEPTION: main
E/AndroidRuntime( 4196): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.X.XCamera/com.X.XCamera.XCameraActivity}: Android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
E/AndroidRuntime( 4196):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2663)
E/AndroidRuntime( 4196):    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2679)
E/AndroidRuntime( 4196):    at Android.app.ActivityThread.access$2300(ActivityThread.Java:125)
E/AndroidRuntime( 4196):    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:2033)
E/AndroidRuntime( 4196):    at Android.os.Handler.dispatchMessage(Handler.Java:99)
E/AndroidRuntime( 4196):    at Android.os.Looper.loop(Looper.Java:123)
E/AndroidRuntime( 4196):    at Android.app.ActivityThread.main(ActivityThread.Java:4627)
E/AndroidRuntime( 4196):    at Java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 4196):    at Java.lang.reflect.Method.invoke(Method.Java:521)
E/AndroidRuntime( 4196):    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:858)
E/AndroidRuntime( 4196):    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:616)
E/AndroidRuntime( 4196):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 4196): Caused by: Android.view.InflateException: Binary XML file line #13: Error inflating class <unknown>
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:513)
E/AndroidRuntime( 4196):    at com.Android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.Java:56)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:563)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:618)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:621)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:407)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:320)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.inflate(LayoutInflater.Java:276)
E/AndroidRuntime( 4196):    at com.X.XCamera.Settings.<init>(Settings.Java:52)
E/AndroidRuntime( 4196):    at com.X.XCamera.XCameraActivity.onCreate(XCameraActivity.Java:92)
E/AndroidRuntime( 4196):    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
E/AndroidRuntime( 4196):    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2627)
E/AndroidRuntime( 4196):    ... 11 more
E/AndroidRuntime( 4196): Caused by: Java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 4196):    at Android.widget.ImageView.<init>(ImageView.Java:108)
E/AndroidRuntime( 4196):    at Java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 4196):    at Java.lang.reflect.Constructor.newInstance(Constructor.Java:446)
E/AndroidRuntime( 4196):    at Android.view.LayoutInflater.createView(LayoutInflater.Java:500)
E/AndroidRuntime( 4196):    ... 22 more
E/AndroidRuntime( 4196): Caused by: Android.content.res.Resources$NotFoundException: File res/drawable/selector_image_view.xml from drawable resource ID #0x7f02000e
E/AndroidRuntime( 4196):    at Android.content.res.Resources.loadDrawable(Resources.Java:1697)
E/AndroidRuntime( 4196):    at Android.content.res.TypedArray.getDrawable(TypedArray.Java:601)
E/AndroidRuntime( 4196):    at Android.view.View.<init>(View.Java:2045)
E/AndroidRuntime( 4196):    at Android.widget.ImageView.<init>(ImageView.Java:112)
E/AndroidRuntime( 4196):    ... 26 more
E/AndroidRuntime( 4196): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable
E/AndroidRuntime( 4196):    at Android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.Java:167)
E/AndroidRuntime( 4196):    at Android.graphics.drawable.Drawable.createFromXmlInner(Drawable.Java:787)
E/AndroidRuntime( 4196):    at Android.graphics.drawable.Drawable.createFromXml(Drawable.Java:728)
E/AndroidRuntime( 4196):    at Android.content.res.Resources.loadDrawable(Resources.Java:1694)
E/AndroidRuntime( 4196):    ... 29 more
W/ActivityManager( 1707):   Force finishing activity com.X.XCamera/.XCameraActivity
I/IMGSRV  ( 1707): gralloc.c:803: gralloc_device_alloc: Allocated a new surface:
I/IMGSRV  ( 1707):        width -> 800
I/IMGSRV  ( 1707):       height -> 382
I/IMGSRV  ( 1707):       format -> 1 (HAL_PIXEL_FORMAT_RGBA_8888)
13
Namratha

あなたのLogcat:

E/AndroidRuntime(4196):発生原因:org.xmlpull.v1.XmlPullParserException:バイナリXMLファイルの行#3:タグには「drawable」属性またはドローアブルを定義する子タグが必要です

LogCatは、<item>タグにAndroid:drawableタグを含める必要があることを指摘しています。

セレクターファイルは次のようになります。

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">     
     <item Android:state_selected="true" Android:drawable="@color/Violet" />    
     <item Android:state_pressed="true" Android:drawable="@color/red" />
     <item Android:drawable="@color/white" />
</selector>
37
Adil Soomro

必要なことを行う最も簡単な方法は、drawable属性を使用する代わりに、アイテムに子ノードを追加することです。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true">
        <color Android:color="@color/Violet" />
    </item>
    <item Android:state_pressed="true">
        <color Android:color="@color/red" />
    </item>
    <item>
        <color Android:color="@color/white" />
    </item>
</selector>

ここでは、色の直接の値(たとえば、「@ color/red」の代わりに#FFFF0000)を使用して、多くの色リソースを定義しないようにすることができます。

17
JBM

セレクターファイルでバックグラウンドタグを使用することはできません。代わりに、次のように使用できます。

1。「res」フォルダーの下の「values」フォルダーにcolor.xmlを作成します。

color.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <drawable name="color_one">#110000</drawable>
    <drawable name="color_two">#001111</drawable>
    <drawable name="color_three">#001100</drawable>    
</resources>

2。さて、セレクターファイルで次のようにこのファイルを使用します。

 <?xml version="1.0" encoding="utf-8"?> 
 <selector xmlns:Android="http://schemas.Android.com/apk/res/Android">     
     <item Android:state_selected="true" Android:drawable="@drawable/color_one" />    
     <item Android:state_pressed="true" Android:drawable="@drawable/color_two" />
     <item Android:drawable="@drawable/color_three"/>
 </selector>
14
Hiral Vadodaria
 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:state_selected="true" Android:drawable="@color/black_mediam" />
    <item Android:state_pressed="true" Android:drawable="@color/black_mediam" />
    <item Android:drawable="@color/menu_bg" />
</selector>

それはImageViewとボタンのために働いています

      <Button
            Android:layout_weight="1"
            Android:background="@drawable/image_selecter"
            Android:id="@+id/btn_delete_gif"
            Android:textAllCaps="false"
            Android:text="Yes"
            Android:textSize="@dimen/_13sdp"
            Android:textColor="@Android:color/white"
            Android:layout_width="175dp"
            Android:layout_height="wrap_content" />


     <ImageView
            Android:padding="@dimen/_3sdp"
            Android:background="@drawable/image_selecter"
            Android:layout_weight="1"
            Android:layout_alignParentRight="true"
            Android:id="@+id/delete_gif_giflistview"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_delete_gif"
            Android:layout_marginLeft="1dp" />
2
Virani Ashish

セレクターを実装する最適な方法は、プログラム的な方法を使用する代わりにxmlを使用することです。これは、xmlを使用するほうが簡単だからです。

    <?xml version="1.0" encoding="utf-8"?>    
<selector xmlns:Android="http://schemas.Android.com/apk/res/Android">
       <item Android:state_selected="true">
    <color Android:color="@color/Violet" />
</item>
<item Android:state_pressed="true">
    <color Android:color="@color/red" />
</item>
<item>
    <color Android:color="@color/white" />
</item>

    </selector>

詳細については、このリンクを使用して実装しました http://www.blazin.in/2016/03/how-to-use-selectors-for-botton.html

1