14

ナビゲーション ドロワー付きのアクション バーが API レベル 9 まで下位互換性を持つように、Action Bar Compat を使用しています。アクション バーの背景を変更したいと考えています。

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

背景のドローアブルはどのように見えるべきですか?

4

4 に答える 4

21

私は現在、同じタスクに取り組んでいます。

これは、アクション バーのグラデーションを定義する 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タイプはデフォルト値です。したがって、明示的に宣言する必要はありません。

これがvaluesフォルダーにある私styles.xmlのものです。

<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>

グラデーションドローアブル

于 2014-01-02T19:46:17.323 に答える
18

を変更しない別のアプローチstyles.xml

これがGradientDrawableの例ですres/drawable/ab_gradient.xml

<?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));
于 2014-03-22T10:26:55.877 に答える