アクションバーコンパットを使用しているので、ナビゲーションドロワー付きのアクションバーはAPIレベル9まで下位互換性があり、アクションバーの背景を変更したいと思います。
Android Developers からコードをコピーしました:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- the theme applied to the application or activity -->
<style name="CustomActionBarTheme"
parent="@style/Theme.AppCompat.Light.DarkActionBar">
<item name="Android:actionBarStyle">@style/MyActionBar</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<!-- ActionBar styles -->
<style name="MyActionBar"
parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="Android:background">@drawable/actionbar_background</item>
<!-- Support library compatibility -->
<item name="background">@drawable/actionbar_background</item>
</style>
</resources>
そして、ここに問題があります。
描画可能な画像や色を背景にすると問題なく動作します。ただし、背景をグラデーションシェイプとして定義したいので、actionbar_background
は次のようになります:
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line">
<gradient
Android:startColor="@color/ac_bg_start"
Android:endColor="@color/ac_bg_end"
Android:type="linear"/>
<size
Android:width="1dp"
Android:height="48dp"/>
</shape>
水平方向に繰り返してほしいのですが、それでもエラーになり、実は非常に興味深いエラーになります。アプリを実行しようとすると、テストデバイスとエミュレーターでさえ再起動します。再起動する前にDeadObjectException
をキャッチできました。
背景のドローアブルはどのように見えるべきですか?
私は現在同じタスクに取り組んでいます。
これが私のaction_bar_bg.xmlファイルで、アクションバーのグラデーションを定義しています。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
Android:angle="90"
Android:centerColor="@color/turquoise_action_bar"
Android:endColor="@color/dark_turquoise"
Android:startColor="@color/dark_turquoise" />
</shape>
DeadObjectException
Android:shape="line"
内部にグラデーションがある場合は使用できません。私はそれをテストしました。 Samsung Galaxy Note 10.1 N8000が再起動し、DeadObjectException
がありました。
グラデーションパターンのlinear
タイプは、default値です。したがって、明示的に宣言する必要はありません。
これが私のstyles.xml
valuesフォルダー内。
<resources>
<!-- Base application theme. -->
<style name="AppThemeBase" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="Android:actionBarStyle">@style/PeopleCanAct</item>
<!-- Support library compatibility -->
<item name="actionBarStyle">@style/MyActionBar</item>
</style>
<style name="AppTheme" parent="AppThemeBase">
<!-- All the customizations that are NOT specific to a particular API level can go here -->
</style>
<!-- ActionBar styles -->
<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
<item name="Android:background">@drawable/action_bar_bg</item>
<!-- Support library compatibility -->
<item name="background">@drawable/action_bar_bg</item>
</style>
</resources>
_styles.xml
_を変更しない別のアプローチ:
これが_res/drawable/ab_gradient.xml
_のGradientDrawableの例です
_<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="rectangle"
Android:useLevel="false" >
<gradient
Android:angle="90"
Android:startColor="#000000"
Android:endColor="#FFFFFF"
Android:type="linear" />
</shape>
_
アクティビティのonCreate()
でアクションバーに設定できます。
_ActionBar actionBar = getActionBar();
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape));
_
サポートv7ライブラリを使用する場合(あなたの場合):
_// make sure to import Android.support.v7.app.ActionBar
ActionBar actionBar = getSupportActionBar();
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape));
_
または、ActionBarSherlockを使用する場合:
_// make sure to import com.actionbarsherlock.app.ActionBar
ActionBar actionBar = getSherlock().getActionBar();
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape));
_
これは、アクションバーxmlの例です。
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<gradient
Android:angle="180"
Android:endColor="#BF797777"
Android:startColor="#A4231E35"
Android:type="linear" />
</shape>
Android:shape = "line"を使用する代わりに、DeadObjectExceptionを回避するために、Android:angleを180または0に設定できます。効果は同じ、つまり水平線のグラデーションになります。
また、Android Developerのサンプルコードを使用し、グラデーションXMLを同じように使用します。
<shape
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:shape="line">
このファイルのあなたと私のファイルの違いはAndroid:shape="line"
/Android:shape="rectangle"
。
だから私は長方形を線に変えようとしています。私のアプリでも同じ例外が発生し、OSが再起動します。形がポイントかもしれません。