2012-08-24 6 views
5

私は複数のテーマの恩恵を受けることができるように私のアプリを構築しています。カスタムスタイルのクラッシュを作成するアプリケーション

私はカスタムアイテムを追加する段階に入っています。

<style name="My.Theme.Default"> 
... 
    <item name="borderColorDialog">@color/red</item> 
... 
</style> 

<style name="My.Theme.Blue"> 
... 
    <item name="borderColorDialog">@color/blue</item> 
... 
</style> 

次のようにだから私は、私のattrファイルに属性borderColorDialogを追加しました:

<attr name="borderColorDialog" format="color" /> 

は今、私はそれをテストしたいです。次のように私は描画可能があります。

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

    <item> 

     <shape 
      android:shape="rectangle" > 

      <solid 
       android:color="?borderColorDialog" /> 

     </shape> 

    </item> 

    <item 
     android:bottom="2dp"> 

     <shape 
      android:shape="rectangle" > 

      <solid 
       android:color="@color/black" /> 

     </shape> 

    </item> 
</layer-list> 

これは、すべてがしかし?borderColorDialog参照エミュレータをクラッシュし、論理的に私には聞こえる表示されます:

E/AndroidRuntime(1461): FATAL EXCEPTION: main 
E/AndroidRuntime(1461): java.lang.RuntimeException: Unable to start activity ComponentInfo{.MainActivity}: android.view.InflateException: Binary XML file line #26: Error inflating class com.android.internal.widget.ActionBarContainer 
E/AndroidRuntime(1461):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059) 
E/AndroidRuntime(1461):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
E/AndroidRuntime(1461):  at android.app.ActivityThread.access$600(ActivityThread.java:130) 
E/AndroidRuntime(1461):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
E/AndroidRuntime(1461):  at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(1461):  at android.os.Looper.loop(Looper.java:137) 
E/AndroidRuntime(1461):  at android.app.ActivityThread.main(ActivityThread.java:4745) 
E/AndroidRuntime(1461):  at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1461):  at java.lang.reflect.Method.invoke(Method.java:511) 
E/AndroidRuntime(1461):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
E/AndroidRuntime(1461):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
E/AndroidRuntime(1461):  at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(1461): Caused by: android.view.InflateException: Binary XML file line #26: Error inflating class com.android.internal.widget.ActionBarContainer 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.createView(LayoutInflater.java:613) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
E/AndroidRuntime(1461):  at com.android.internal.policy.impl.PhoneWindow.generateLayout(PhoneWindow.java:2784) 
E/AndroidRuntime(1461):  at com.android.internal.policy.impl.PhoneWindow.installDecor(PhoneWindow.java:2844) 
E/AndroidRuntime(1461):  at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:252) 
E/AndroidRuntime(1461):  at android.app.Activity.setContentView(Activity.java:1867) 
E/AndroidRuntime(1461):  at .MainActivity.onCreate(MainActivity.java:30) 
E/AndroidRuntime(1461):  at android.app.Activity.performCreate(Activity.java:5008) 
E/AndroidRuntime(1461):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
E/AndroidRuntime(1461):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023) 
E/AndroidRuntime(1461):  ... 11 more 
E/AndroidRuntime(1461): Caused by: java.lang.reflect.InvocationTargetException 
E/AndroidRuntime(1461):  at java.lang.reflect.Constructor.constructNative(Native Method) 
E/AndroidRuntime(1461):  at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
E/AndroidRuntime(1461):  at android.view.LayoutInflater.createView(LayoutInflater.java:587) 
E/AndroidRuntime(1461):  ... 24 more 
E/AndroidRuntime(1461): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/actionbar_background.xml from drawable resource ID #0x7f020001 
E/AndroidRuntime(1461):  at android.content.res.Resources.loadDrawable(Resources.java:1918) 
E/AndroidRuntime(1461):  at android.content.res.TypedArray.getDrawable(TypedArray.java:601) 
E/AndroidRuntime(1461):  at android.view.View.<init>(View.java:3336) 
E/AndroidRuntime(1461):  at android.view.ViewGroup.<init>(ViewGroup.java:427) 
E/AndroidRuntime(1461):  at android.widget.FrameLayout.<init>(FrameLayout.java:101) 
E/AndroidRuntime(1461):  at android.widget.FrameLayout.<init>(FrameLayout.java:97) 
E/AndroidRuntime(1461):  at com.android.internal.widget.ActionBarContainer.<init>(ActionBarContainer.java:52) 
E/AndroidRuntime(1461):  ... 27 more 
E/AndroidRuntime(1461): Caused by: java.lang.UnsupportedOperationException: Can't convert to color: type=0x2 
E/AndroidRuntime(1461):  at android.content.res.TypedArray.getColor(TypedArray.java:326) 
E/AndroidRuntime(1461):  at android.graphics.drawable.GradientDrawable.inflate(GradientDrawable.java:951) 
E/AndroidRuntime(1461):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881) 
E/AndroidRuntime(1461):  at android.graphics.drawable.LayerDrawable.inflate(LayerDrawable.java:165) 
E/AndroidRuntime(1461):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881) 
E/AndroidRuntime(1461):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:818) 
E/AndroidRuntime(1461):  at android.content.res.Resources.loadDrawable(Resources.java:1915) 
E/AndroidRuntime(1461):  ... 33 more 

エラーが延々と続きます。基本的にXMLを参照します。

@color/redに返信してください。

どうすればこの問題を解決できますか?

+0

あなたが全体のエラーを表示することができますか?そのコンポーネントだけでは十分ではありません。 – Eric

+0

@エリックそれはどう? – HGPB

+1

ええと、ええ、私はあなたが望むようにこれを行うことができるか分からない。つまり、属性の代わりにカラーリソースを設定することはできますが、テーマには最適ではありません。あなたは[コードを介して](http://stackoverflow.com/questions/7896615/android-how-to-get-value-of-an-attribute-in-code)してみることもできますが、あなただけではありません1つは、この問題([1](http://stackoverflow.com/questions/8041537/how-to-reference-style-attributes-from-a-drawable)、[2](http://stackoverflow.com/questions/7529574/how-to-draw-to-styleから))...これはAndroid OSの制限だと思っています。 – Eric

答えて

2

Androidでは、私の経験上、ドロアブル内の属性を持つ色を参照することはできません。テーマごとに1つの図形を作成するという問題を解決しました。 私はここで、前の質問への答えとして説明を掲載:

https://stackoverflow.com/a/13471695/891479

関連する問題