9

Eylem Çubuğu Uyumluluğunu kullanıyorum, böylece gezinti çekmeceli eylem çubuğum geri aşağı API düzey 9'a uyumluydu ve ben eylem çubuğunun arka planını değiştirmek istiyorum.Özel (degrade) arka plan ActionBar Uyumluluk

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

Ve burada sorun gelir:

ben Android Developers kodu kopyalandı.

Arka plan olarak resim çekilebilir veya renk koyarken, iyi çalışıyor. Bunun yatay şekilde tekrarlanması ama bu bile aslında çok ilginç bir hata, hata ile sonuçlanır istiyorum

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

: gibi benim actionbar_background görünüyor böylece Ancak, bir degrade şekli olarak arka planını tanımlamak istiyorum. Uygulamayı çalıştırmayı denediğimde test cihazı ve hatta emülatör yeniden başlatılıyor. Yeniden başlatmadan önce DeadObjectException'u yakalayabildim.

Arka plan çizilebilir nasıl görünür?

cevap

16

Şu anda aynı görev üzerinde çalışıyorum.

Burada, eylem çubuğumun degradesini tanımladığım action_bar_bg.xml dosyam var. içinde bir gradyan varsa

<?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" kullanılamaz. Ben test ettim; Samsung Galaxy Note 10.1 N8000 cep telefonum yeniden başlatıldı ve bir DeadObjectException vardı.

linear degrade şablonunun türü varsayılan değeridir. Yani açıkça ilan etmek zorunda değilsin.

Benim styles.xml benim değerler klasöründe.

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

+1

@ tarzı/PeopleCanAct şekilde değiştirilmelidir Bu işleri –

+0

olduğu gibi bir derleme hatası alırsınız/MyActionBar @ tarzı, DeadObjectException bölümünü anlamadığım halde, bir cihaz ne zaman bu istisnayı alır? – Bruce

16

styles.xml değiştirmeden başka bir yaklaşım,: Burada

GradientDrawable bizim örnektir 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> 

Sen senin Etkinlik en onCreate() eylem çubuğuna ayarlayabilirsiniz:

ActionBar actionBar = getActionBar();  
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 

Eğer destek v7 kitaplığı (davanız) kullanıyorsanız:

// make sure to import android.support.v7.app.ActionBar 
ActionBar actionBar = getSupportActionBar();   
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 

Yoksa ActionBarSherlock kullanırsanız:

// make sure to import com.actionbarsherlock.app.ActionBar 
ActionBar actionBar = getSherlock().getActionBar();  
actionBar.setBackgroundDrawable(getResources().getDrawable(R.drawable.action_bar_gradient_shape)); 
+0

Bu görünüşe göre de çalışıyor, ama diğer cevabı kabul ettim, çünkü kodun neyin yanlış olduğunu açıklıyor. –

+0

@ Max77 .getDrawable artık kullanımdan kaldırıldı. Kullanım dışı yöntemi değiştirmek için yeni kod nedir? – iOSAndroidWindowsMobileAppsDev

+1

@JqueryNinja bu iyi cevabı kontrol edin: http://stackoverflow.com/questions/29041027/android-getresources-getdrawable-deprecated-api-22 – Max77

0

Ben de Android Geliştirici o örnek kod kullanmaya degrade XML kullanabilirsiniz Seninki gibi.

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

seninki ve benimki arasında bu dosyanın farklı android:shape="line"/ android:shape="rectangle" olduğunu gördük.

Dikdörtgeni çizgiye çevirmeyi denedim. Uygulamam da aynı istisna oluşturuyor ve işletim sistemi yeniden başlatılıyor. Belki de şekil anahtar noktadır.

+0

Bu soruya gerçekten cevap vermiyor. Farklı bir sorunuz varsa, [Soru Sor] 'u tıklayarak sorabilirsiniz (http://stackoverflow.com/questions/ask). Yeterli [itibara] sahip olduğunuzda [http://stackoverflow.com/help/] de bu soruya daha fazla dikkat çekmek için [bir hediye] ekleyebilirsiniz (http://stackoverflow.com/help/privileges/set-bounties). neyin-itibar). – maszter

İlgili konular