2013-04-11 17 views
6

Eylem çubuğum ile Açılır Gezinti kullanıyorum ve karanlık bir eylem çubuğu kullanırken karşılık gelen metin için duyarlı bir renk alamıyorum . Eylem çubuğunun kendisi koyu gri ve metin rengi siyah, bu yüzden okunması çok zor. ,Android Action Çubuğu açılır gezinme ile metin rengini değiştiremezsiniz

yüzden benim kod basitçe

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 
ActionBar.OnNavigationListener navigationListener = new OnNavigationListener() { 
    @Override 
    public boolean onNavigationItemSelected(int itemPosition, long itemId) { 
     // TODO 
     return false; 
    } 
}; 
ActionBar actionBar = getActionBar(); 
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);   
actionBar.setListNavigationCallbacks(mSpinnerAdapter, navigationListener); 

olduğunu Action Bar developer's guide üzerinde temel talimatları takip ve benim styles.xml Bana mantıklı bir şey vermiş olması gerekir düşünüyorum basitçe

<resources> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    </style> 
</resources> 

oldu ancak aşağıdaki görüntü gösterildikçe, koyu gri bir arka plan üzerinde siyah bir metin olarak çıkıyor, bu yüzden iyi değil.

Image of menu with black text on a dark grey background

denemek ve sorunu çözmek için styles.xml dosyası ile uğraşırken denedim. En iyi girişimiydi aşağıdaki

Best attempt at making the items readable in the navigation dropdown

<resources> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
     <item name="android:actionDropDownStyle">@style/myActionDropDownStyle</item> 
     <item name="android:actionBarStyle">@style/myActionBar</item> 
    </style> 

    <style name="myActionDropDownStyle" parent="android:style/Widget.Holo.Light.Spinner"> 
     <item name="android:background">@color/LightCyan</item> 
    </style> 

    <style name="myActionBar" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse">  
     <item name="android:titleTextStyle">@style/myActionBar.titleTextStyle</item> 
    </style> 

    <style name="myActionBar.titleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title.Inverse"> 
     <item name="android:textColor">@color/Orange</item> 
    </style> 
</resources> 
hangi idi (1) Orange Uygulama başlığının metin rengini değiştirmek mümkün, (2) seçilen navigasyon öğenin arka plan rengini değiştirmek için mümkün eylem çubuğunda açık maviye, (3) açılan pencerenin arka plan rengini değiştirebilir, böylece en azından siyah metin açık bir arka plana karşı gösterilir. Ancak, yaptığım hiçbir şey, metin çubuğunun kendisinde, ya da eylem çubuğunda gösterilen seçili öğe ya da açılır menüde gösterilen öğeler için değişiklik yapar. Benim en iyi denemem de korkunç görünüyor :-(!

Tek istediğim, öğe çubuğunda gösterilen seçili öğe için duyarlı bir metin rengiyle karanlık bir eylem çubuğudur. seçildiyse ve bir öğe seçildiğinde açılan fon için arka plan rengiyle birlikte, eylem çubuğuyla aynı renkte olur.Ama nasıl yapılacağını bilemiyorum, herkes yardımcı olabilir mi?

FYI, I'm Eclipse'i çok yakın zamanda indirdiğim bir adt-bundle kullanarak (adt-bundle-windows-x86_64-20130219). Ben çözümler aradığımda, Sherlock eylem çubuğu hakkında çok şey buluyorum, ancak Sherlock için stilleri dahil değildi Her durumda, benim istediğim Holo.Light.DarkActionBar ile kesinlikle istediğim ne olmalı?

+0

bakın bu ... http: //stackoverflow.com/questions/3519277/how-to -de-metin-renk-menü-madde-in-android? rq = 1 –

cevap

9

ben şöyle ArrayAdapter benim kendi alt sınıfını oluşturarak kod açılır Navigasyon için renkleri değiştirebileceğini dışarı çalıştık:

public class myArrayAdaptor<T> extends ArrayAdapter<T> { 

    public myArrayAdaptor(Context context, int textViewResourceId, T[] objects) { 
     super(context, textViewResourceId, objects); 
    } 

    public static myArrayAdaptor<CharSequence> createFromResource(Context context, int textArrayResId, int textViewResId) { 
     CharSequence[] strings = context.getResources().getTextArray(textArrayResId); 
     return new myArrayAdaptor<CharSequence>(context, textViewResId, strings); 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     return SetColourWhite(super.getView(position, convertView, parent)); 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     return SetColourWhite(super.getView(position, convertView, parent)); 
    } 

    private View SetColourWhite(View v) { 
     if (v instanceof TextView) ((TextView)v).setTextColor(Color.rgb(0xff, 0xff, 0xff)); // white 
     return v; 
    } 
} 

basit styles.xml ile Ardından

<resources> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
    </style> 
</resources> 

sınıf myArrayAdaptor

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item) 

yerini alabilir ve metin rengi her zaman w olacak hite. Ancak, styles.xml dosyasındaki ayarları kullanarak bunu yapmanın daha basit bir yolu yok mu?

+4

['ContextThemeWrapper'] kullanabilirsiniz (http://developer.android.com/reference/android/view/ContextThemeWrapper. html): 'SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource (yeni ContextThemeWrapper (bu, android.R.style.Theme_Holo), R.array ...., android.R.layout ....);' –

+6

Veya ['ActionBar .getThemedContext() '] _API 14 + _ için http://developer.android.com/reference/android/app/ActionBar.html#getThemedContext()). Cevabı burada buldum (https://code.google.com/p/android/issues/detail?id=25624#c1). –

+0

@SaDec, teşekkürler, eğer bu uygulamayı tekrar gözden geçirmem gerekiyorsa, önerilerinize bakarım :-). – Stochastically

28

Lütfen kısırlığımı bağışlayın, ancak bu gerçekten beni bugün şaşırttı ve çözüm aslında oldukça hızlı ve özel adaptörler veya stil gerektirmez.

GetActionBar(). GetThemedContext() öğesini kullanmak yerine, SpinnerAdapter yapıcısındaki içeriği değiştirirseniz, Action Bar'ın stiliyle eşleşecek koyu bir arka plan üzerinde açık metin gösterecektir.

SpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(getActionBar().getThemedContext(), R.array.action_list, android.R.layout.simple_spinner_dropdown_item); 
+0

Teşekkürler, öneri :-) için. Bu cevaba ihtiyacım olan proje artık uykuda, ama proje yeniden canlandırılırsa önerinize bakacağım. – Stochastically

+0

Harika çözüm. Bu kabul edilen cevap olmalı. –

+0

Çalışıyor! Çok teşekkürler. Yazı rengini siyahtan beyaza nasıl değiştireceğimizi öğrenmek için Theme-Generator'dan (http://jgilfelt.github.io/android-actionbarstylegenerator/) oluşturulan temalarla mücadele ediyordum. –

3

Java kodu

SpinnerAdapter adapter = ArrayAdapter.createFromResource(this, 
     R.array.actions,R.layout.dropdown_textcolor); 

// OnNavigationListener 
OnNavigationListener callback = new OnNavigationListener() { 

    String[] items = getResources().getStringArray(R.array.actions); 
    public boolean onNavigationItemSelected(int position, long id) { 

     // Do stuff when navigation item is selected 
     Log.d("NavigationItemSelected", items[position]); // Debug 
     return true; 
    } 

}; 


ActionBar actions = getSupportActionBar(); 
actions.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
actions.setDisplayShowTitleEnabled(false); 

actions.setListNavigationCallbacks(adapter, callback); 

Xml dropdown_textcolor.xml

<?xml version="1.0" encoding="utf-8"?> 
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/text1" 
    style="?android:attr/spinnerDropDownItemStyle" 
    android:singleLine="true" 
    android:layout_width="match_parent" 
    android:textColor="@android:color/white" 
    android:layout_height="wrap_content" 
    android:padding="10dp" 
    android:ellipsize="marquee" 
    android:textAlignment="inherit"/> 
+0

İYİ CEVAP - Benim hakkımı aldın! – TwoStarII

0

Eğer AppCompat destek kitaplığı kullanıyorsanız .. bu .. size yardımcı olabilir

<style name="MyActionBar3" parent="@style/Widget.AppCompat.Light.ActionBar"> 
    <item name="android:background">@color/ActionBarBackground</item>   
</style> 

<style name="MyActionBarDropDownStyle" parent=""> 
    <item name="android:background">#00FF00</item>   
    <item name="android:divider">#ff0000</item> 
    <item name="android:dividerHeight">1dp</item> 
    <item name="android:textColor">#FFFFFF</item>  
    <item name="android:textSize">10sp</item> 
</style> 

<style name="MyTextStyle" parent="@style/Widget.AppCompat.Light.Base.ListPopupWindow"> 
    <item name="android:popupBackground">#FF0000</item>   
</style> 
İlgili konular