0

カスタムレイアウトと2つのテーマ(昼と夜)でボタンを作成しようとしています。

ボタンのレイアウトには、背景画像(描画可能)とテキスト(文字列)があります。

テーマは、描画可能(PNGが2つあります)とテキストの色が異なる必要があります。

私のアプローチは次のとおりです。

  1. ボタンのレイアウトで、背景の描画可能オブジェクトをセレクターとして設定します。

  2. これはdrawable/btn_basket_calls.xmlです

    <item
        android:drawable="@drawable/btn_basket_calls_pressed"
        android:state_focused="true"
        android:state_pressed="true"
        />
    
    <item
        android:drawable="@drawable/btn_basket_calls_pressed"
        android:state_focused="false"
        android:state_pressed="true"
        />
    
    <item
        android:drawable="@drawable/btn_basket_calls_selected"
        android:state_focused="true"
        />
    
    <item
        android:drawable="@drawable/btn_basket_calls_disabled"
        android:state_enabled="false"
        />
    
    <item
        android:drawable="?attr/btn_basket_calls_default"
        android:state_focused="false"
        android:state_pressed="false"
        />
    

  3. 「デフォルト」ドローアブルは、attrs.xmlで次のように定義されている属性「btn_basket_calls_default」への参照です。

  4. AppThemeには、styles.xmlに2つのサブテーマがあります。

    @ drawable / btn_basket_calls_d_default

    @ drawable / btn_basket_calls_n_default

AFAIKは機能するはずです:)ただし、プロジェクトは正常に準拠していますが、実行時の例外が発生します。

E/AndroidRuntime( 1154): FATAL EXCEPTION: main
E/AndroidRuntime( 1154): java.lang.RuntimeException: Unable to start activity ComponentInfo{a.daynighttest/a.daynighttest.DayNightTestActivity}: android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
E/AndroidRuntime( 1154):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
E/AndroidRuntime( 1154):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
E/AndroidRuntime( 1154):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime( 1154):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime( 1154):    at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 1154):    at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 1154):    at android.app.ActivityThread.main(ActivityThread.java:3683)
E/AndroidRuntime( 1154):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 1154):    at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 1154):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
E/AndroidRuntime( 1154):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
E/AndroidRuntime( 1154):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 1154): Caused by: android.view.InflateException: Binary XML file line #9: Error inflating class <unknown>
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.createView(LayoutInflater.java:518)
E/AndroidRuntime( 1154):    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.inflate(LayoutInflater.java:408)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.inflate(LayoutInflater.java:320)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.inflate(LayoutInflater.java:276)
E/AndroidRuntime( 1154):    at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:207)
E/AndroidRuntime( 1154):    at android.app.Activity.setContentView(Activity.java:1657)
E/AndroidRuntime( 1154):    at a.daynighttest.DayNightTestActivity.onCreate(DayNightTestActivity.java:13)
E/AndroidRuntime( 1154):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 1154):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
E/AndroidRuntime( 1154):    ... 11 more
E/AndroidRuntime( 1154): Caused by: java.lang.reflect.InvocationTargetException
E/AndroidRuntime( 1154):    at java.lang.reflect.Constructor.constructNative(Native Method)
E/AndroidRuntime( 1154):    at java.lang.reflect.Constructor.newInstance(Constructor.java:415)
E/AndroidRuntime( 1154):    at android.view.LayoutInflater.createView(LayoutInflater.java:505)
E/AndroidRuntime( 1154):    ... 22 more
E/AndroidRuntime( 1154): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/btn_basket_calls.xml from drawable resource ID #0x7f020000
E/AndroidRuntime( 1154):    at android.content.res.Resources.loadDrawable(Resources.java:1697)
E/AndroidRuntime( 1154):    at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
E/AndroidRuntime( 1154):    at android.view.View.<init>(View.java:1951)
E/AndroidRuntime( 1154):    at android.view.View.<init>(View.java:1899)
E/AndroidRuntime( 1154):    at android.view.ViewGroup.<init>(ViewGroup.java:286)
E/AndroidRuntime( 1154):    at android.widget.LinearLayout.<init>(LinearLayout.java:120)
E/AndroidRuntime( 1154):    ... 25 more
E/AndroidRuntime( 1154): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #31: <item> tag requires a 'drawable' attribute or child tag defining a drawable
E/AndroidRuntime( 1154):    at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:167)
E/AndroidRuntime( 1154):    at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787)
E/AndroidRuntime( 1154):    at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728)
E/AndroidRuntime( 1154):    at android.content.res.Resources.loadDrawable(Resources.java:1694)
E/AndroidRuntime( 1154):    ... 30 more

詳細については、添付の完全なEclipseプロジェクトを参照してください。

ありがとう!:)

4

1 に答える 1

1

これを追加する必要があります:

<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

最初に、これ:

</selector>

btn_basket_calls.xml ファイルの最後まで。

于 2012-04-06T15:22:16.127 に答える