setBackgroundResource вызывает android.content.res.Resources$NotFoundException

У меня есть файл btn_solve_selector.xml в папке Drawable, чтобы программно установить фон Button.

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true"
      android:color="#ffff0000"/> <!-- pressed -->
<item android:state_focused="true"
      android:color="#ff0000ff"/> <!-- focused -->
<item android:color="#ff0000ff"/> <!-- default -->
</selector>

С приведенным выше кодом я закодировал код ниже в onCreate из MyActivity.

    _button1.setBackgroundResource(R.drawable.btn_solve_selector);

Но приложение разбилось с последующей трассировкой стека.

Caused by: android.content.res.Resources$NotFoundException: File res/drawable/btn_solvenow_selector.xml from drawable resource ID #0x7f020085
....
at com.MyPackage.MyActivity.setMode(MyActivity.java:343)
....
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <item> tag requires a 'drawable' attribute or child tag defining a drawable
....

Похоже, что файл xml с возможностью рисования не может быть прочитан, даже если файл содержит <item /> внутри него, а затем возвращается к чтению android.content.res в качестве второго испытания. (Вместо этого я даже проверил com.MyPackage.R.drawable.btn_solve_selector, но не смог).

Я удалил и переустановил приложение, но не получилось. Что мне не хватает?


person Youngjae    schedule 03.06.2013    source источник
comment
Просто приведенный выше код _button1.setBackgroundResource(R.drawable.btn_solve_selector); был помещен в onCreate().   -  person Youngjae    schedule 03.06.2013
comment
вы можете применить фон к кнопке, используя android:background=@drawable/btn_solve_selector для кнопки в XML-файле макета.   -  person Sharad Mhaske    schedule 03.06.2013
comment
@SharadMhaske // спасибо за ответ, фон кнопки нужно изменить в некоторых режимах в моем приложении.   -  person Youngjae    schedule 03.06.2013
comment
@Youngjae: проверьте мой отредактированный код, надеюсь, он вам поможет   -  person Sharad Mhaske    schedule 03.06.2013


Ответы (2)


использовать это-

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

    <item android:state_pressed="false">
    <shape>
            <gradient
                android:startColor="#E51400"
                android:endColor="#E51400"
                />
              <stroke
                android:width="3dp"
                android:color="#FFFFFF" />
              <corners
                android:radius="10dp" />

                <padding
                android:left="5dp"
                android:top="4dp"
                android:right="5dp"
                android:bottom="4dp" />

        </shape>
</item>

  <item android:state_pressed="true">
    <shape>
            <gradient
                android:startColor="#4AA038"
                android:endColor="#72C437"
               />

             <stroke
                android:width="3dp"
                android:color="#FFFFFF" />

             <corners
                android:radius="10dp" />
               <padding
                android:left="5dp"
                android:top="4dp"
                android:right="5dp"
                android:bottom="4dp" />

        </shape>
</item>



</selector>
person Sharad Mhaske    schedule 03.06.2013
comment
О, ты делаешь мой день. Спасибо :) - person Youngjae; 03.06.2013

Попробуйте использовать android:drawable вместо android:color в вашем XML-файле селектора, у меня это работает.

Попробуйте очистить проект тоже

person AAnkit    schedule 03.06.2013
comment
Извините, что изменил флаг ответа. Шарад дает решение с чистым содержимым xml. (и я голосую за ваш) - person Youngjae; 03.06.2013
comment
Лучший ответ, но есть еще кое-что: stackoverflow.com/a/17701589/507339 - все еще не так много XML как ответ Маске. - person Nilzor; 18.08.2014
comment
@AAnkit Я тоже столкнулся с той же проблемой, я применил ответ, данный Шарадом Мхаске, но не повезло, и, как вы сказали, я использую android:drawable вместо android:color, даже это тоже не сработало, я получаю такая же ошибка. Любые идеи о том, как решить эту проблему, на Android 4.4 и выше работает тот же код, но в Android 2.3 v10 возникает эта ошибка. - person codemilan; 11.11.2016
comment
Я должен буду посмотреть на ваш код. Можете ли вы создать вопрос, разместить код там, разместить ссылку здесь, я посмотрю на это. - person AAnkit; 11.11.2016