20

Whats wrong with this xml, I am trying to get a button press feel. I am getting a exception, I am unable to understood. ResourceNotFound

In my layout.xml

<Button
    android:id="@+id/submit"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/submitbuttonpress"
    android:text="Submit"
    android:textColor="#eeeee4"
    android:typeface="monospace" />

My submitbuttonpress.xml in the drawable folder

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:background="#AAAAAA" />
    <item android:state_pressed="true" android:background="#777777" />
</selector>

Exception (logcat)

07-17 19:07:25.072: E/AndroidRuntime(2225): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.taxeeta/com.itaxeeta.BookingExperience}: android.view.InflateException: Binary XML file line #326: Error inflating class android.widget.Button
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.os.Handler.dispatchMessage(Handler.java:99)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.os.Looper.loop(Looper.java:130)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread.main(ActivityThread.java:3687)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at java.lang.reflect.Method.invokeNative(Native Method)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at java.lang.reflect.Method.invoke(Method.java:507)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at dalvik.system.NativeStart.main(Native Method)
07-17 19:07:25.072: E/AndroidRuntime(2225): Caused by: android.view.InflateException: Binary XML file line #326: Error inflating class android.widget.Button
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.createView(LayoutInflater.java:518)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.rInflate(LayoutInflater.java:626)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:216)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.Activity.setContentView(Activity.java:1660)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at com.itaxeeta.BookingExperience.onCreate(BookingExperience.java:100)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
07-17 19:07:25.072: E/AndroidRuntime(2225):     ... 11 more
07-17 19:07:25.072: E/AndroidRuntime(2225): Caused by: java.lang.reflect.InvocationTargetException
07-17 19:07:25.072: E/AndroidRuntime(2225):     at java.lang.reflect.Constructor.constructNative(Native Method)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.LayoutInflater.createView(LayoutInflater.java:505)
07-17 19:07:25.072: E/AndroidRuntime(2225):     ... 27 more
07-17 19:07:25.072: E/AndroidRuntime(2225): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/nextprevbuttonpress.xml from drawable resource ID #0x7f02003e
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.content.res.Resources.loadDrawable(Resources.java:1697)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.view.View.<init>(View.java:1951)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.widget.TextView.<init>(TextView.java:389)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.widget.Button.<init>(Button.java:108)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.widget.Button.<init>(Button.java:104)
07-17 19:07:25.072: E/AndroidRuntime(2225):     ... 30 more
07-17 19:07:25.072: E/AndroidRuntime(2225): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #3: <item> tag requires a 'drawable' attribute or child tag defining a drawable
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:167)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
07-17 19:07:25.072: E/AndroidRuntime(2225):     at android.content.res.Resources.loadDrawable(Resources.java:1694)
07-17 19:07:25.072: E/AndroidRuntime(2225):     ... 35 more
taxeeta
  • 1,188
  • 1
  • 12
  • 25
  • 2
    You cannot stick a raw colour string into your `` like that. You need to create shape drawables for each state and reference those in your selector using `android:drawable`. Check the valid attributes for `` here: http://developer.android.com/guide/topics/resources/drawable-resource.html#StateList – Ken Wolf Jul 17 '13 at 13:45
  • Thanks, yes it was also on the exception, dont know why I missed it. – taxeeta Jul 17 '13 at 13:58

2 Answers2

34

Once Try this

In selector state it is required to add drawable and in your case you wants to add color in selector state.So it is possible to create drawable using color in resource. It will work as ColorDrawable

Please check below code

<selector xmlns:android="http://schemas.android.com/apk/res/android">

        <item android:drawable="@drawable/clr_normal" android:state_pressed="false"/>
        <item android:drawable="@drawable/clr_pressed" android:state_pressed="true"/>

    </selector>

values/string.xml for color

 <drawable name="clr_normal">#AAAAAA</drawable>
<drawable name="clr_pressed">#777777</drawable>
user1140237
  • 5,015
  • 1
  • 28
  • 56
0

The attribute android:background does not exist. The correct way to do this is to first create a new resource file res/colors.xml with the following contents:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="lt_gray">#AAAAAA</color>
    <color name="dk_gray">#777777</color>
</resources>

Then just change your selector to the following:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false" android:drawable="@color/lt_gray" />
    <item android:state_pressed="true" android:drawable="@color/dk_gray" />
</selector>

This automatically creates a ColorDrawable and assigns it as the drawable for that state.

Phil
  • 35,852
  • 23
  • 123
  • 164
  • 1
    Actually, this doesn't work if you give hex color to `android:drawable`. You should instead create a `color` attribute in `style.xml` or `strings.xml` and then give the color name to android:drawable like so : `android:drawable="@color/bg_color"` – Mehdiway Mar 11 '14 at 11:07
  • I get a lint error 'color attribute should be defined' – frankelot Jan 22 '17 at 19:42