2012-07-09 19 views
15

He intentado por un tiempo para diseñar los elementos en una lista desplegable que agregué a la barra de acciones, pero no puedo encontrar el código correcto.Estilo Elementos desplegables de la barra de acción Sherlock

Traté de buscar en el abs__styles.xml y abs__themes.xml en el proyecto SherlockActionBar, pero ninguno de los elementos que agregué a mi proyecto funcionó.

La forma en que estoy creando los menús es la siguiente:

@Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Sharing icons 
     SubMenu submenu = menu.addSubMenu(null); 
     submenu.add(getResources().getString(R.string.twitter)); 
     submenu.add(getResources().getString(R.string.facebook)); 
     submenu.add(getResources().getString(R.string.email)); 

     // Share button itself 
     MenuItem ShareButton = submenu.getItem(); 
     ShareButton.setIcon(R.drawable.icon_share_triangle); 
     ShareButton.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 

     // Twitter submenu button 
     MenuItem TwitterItem = submenu.getItem(0); 
     TwitterItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WITH_TEXT); 
     TwitterItem.setOnMenuItemClickListener(new OnMenuItemClickListener() { 
      public boolean onMenuItemClick(MenuItem item) { 
       setShareTwitterIntent(); 
       return true; 
      } 
     }); 
... 
} 

También probé echar un vistazo a este post usando el siguiente código, pero sigue sin suerte:

<!-- style the list navigation --> 
<style name="MyDropDownNav" parent="android:style/Widget.Holo.Light.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/ad_spinner_background_holo_light</item> 
    <item name="android:popupBackground">@drawable/ad_menu_dropdown_panel_holo_light</item> 
    <item name="android:dropDownSelector">@drawable/ad_selectable_background</item> 
</style> 

I solo necesita cambiar el color de fondo de los elementos en la lista desplegable.

¡Muchas gracias por su ayuda!

EDIT:

También probamos este, y todavía no funciona:

<item name="android:actionDropDownStyle">@style/MyApp.DropDownNav</item> 
<item name="actionDropDownStyle">@style/MyApp.DropDownNav</item> 
... 
<style name="MyApp.DropDownNav" parent="Widget.Sherlock.Light.Spinner.DropDown.ActionBar"> 
     <item name="android:background">@drawable/sharing_panel</item> 
</style> 
+0

¿Su tema personalizado se deriva de Theme.Holo.Light.DarkActionBar? –

+0

¿Resolvió su problema? – Spike

+0

esto se pospuso en mi proyecto ya que era de baja prioridad, pero tan pronto como lo arregle, les haré saber ... – noloman

Respuesta

27

Tuve el mismo problema y después de un montón de rasguños en la cabeza, el tipo de rascado como un perro con un mal caso de pulgas, lo hice funcionar. Esto es con ABS 4.1 (90). El código siguiente cambiará el color de fondo del elemento desplegable.

SomeActivity.java

Context context = ab.getThemedContext(); 
ArrayAdapter<CharSequence> list = ArrayAdapter.createFromResource(
    context, R.array.map_activity_view_list, 
    R.layout.sherlock_spinner_item); 
list.setDropDownViewResource(R.layout.sherlock_spinner_dropdown_item); 

Nota: Se utiliza para la R.layout.sherlock_spinner_item createFromResource y R.layout.sherlock_spinner_dropdown_item para la setDropDownViewResource. Esto es lo que aparece en la muestra en la fuente ABS: https://github.com/JakeWharton/ActionBarSherlock/blob/master/samples/demos/src/com/actionbarsherlock/sample/demos/ListNavigation.java

Esto es porque el menú desplegable sin seleccionar en la barra de acción cuando es el diseño sherlock_spinner_item y los elementos desplegables reales utilizar la distribución de sherlock_spinner_dropdown_item que significa que los estilos son diferentes para cada uno:

  • sherlock_spinner_item
    • androide: spinnerItemStyle
    • spinnerItemStyle
  • sherlock_spinner_dropdown_item
    • androide: spinnerDropDownItemStyle
    • spinnerDropDownItemStyle

Recuerde se necesitan dos estilos - android: el prefijo estilos de la Barra de acciones ICS nativo y el estilo sin el androide : el prefijo es para el estilo AcrionBarSherlock en dispositivos anteriores a ICS.

res/valores/styles.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="Theme.MyApp" parent="Theme.Sherlock.Light"> 
     <!-- the text when loading --> 
     <!-- 
     <item name="actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     <item name="android:actionBarStyle">@style/Widget.MyApp.ActionBar</item> 
     --> 

     <!-- the dropdown items --> 
     <item name="android:spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 
     <item name="spinnerDropDownItemStyle">@style/MyApp.Widget.Holo.DropDownItem</item> 

     <!-- the action bar dropdown menu item --> 
     <!-- 
     <item name="android:spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     <item name="spinnerItemStyle">@style/MyApp.Widget.Holo.SpinnerItem</item> 
     --> 
    </style> 

    <style name="Widget.MyApp.ActionBar" parent="Widget.Sherlock.Light.ActionBar"> 
     <item name="titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
     <item name="android:titleTextStyle">@style/Widget.MyApp.TitleTextStyle</item> 
    </style> 

    <style name="Widget.MyApp.TitleTextStyle" parent="TextAppearance.Sherlock.Widget.ActionBar.Title"> 
    <item name="android:textColor">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.DropDownItem" parent="Widget.Sherlock.Light.DropDownItem.Spinner"> 
     <item name="android:background">@color/orange</item> 
    </style> 

    <style name="MyApp.Widget.Holo.SpinnerItem" parent="Widget.Sherlock.TextView.SpinnerItem"> 
     <item name="android:background">@color/orange</item> 
    </style> 

</resources> 

res/valores/color.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 

<color name="orange">#ffEf4f1f</color> 

</resources> 

favor Marcar como respuesta si esto resuelve por usted. ¡Gracias!

Enlaces:

Explorar estilos:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__styles.xml

Explorar temas:

https://github.com/JakeWharton/ActionBarSherlock/blob/master/actionbarsherlock/res/values/abs__themes.xml

+2

no, no funciona como usted dijo. Sin embargo, actualicé mi publicación mostrando cómo creo el menú. – noloman

+0

Extraño, funcionó para mí en mi proyecto. Quizás haya otros cambios en sus estilos/temas que lo están afectando. –

+0

La clave para mí fue usar getThemedContext() en lugar de simplemente pasar la actividad. ¡Gracias! – phreakhead

0

ActionBarSherlock requiere el uso de una de sus 3 temas. Se pueden ampliar sin embargo, y anular el estilo desplegable, como esto:

<style name="MySherlockLightTheme" parent="Theme.Sherlock.Light"> 
    <item name="actionDropDownStyle">@style/MyDropDownNav</item> 
</style> 

Esto es suponiendo que desea que el tema de la luz holográfica, y su estilo es desplegable MyDropDownDav.

Luego, en su código, simplemente cambie para usar su tema (ya sea en el manifiesto, o hacerlo en Activity onCreate).

+0

Asegúrese de poner '' item name = "android: actionDropDownStyle"> @ style/MyDropDownNav 'para que la barra de acciones nativa lo use también en honeycomb y más tarde. – Karakuri

+0

Hice un pero todavía no funciona, no hay diferencias ... – noloman

4

Para cambiar el dibujable fondo del elemento de menú en Sherlock Barra de acción (V4. 1.0), use lo siguiente:

<style name="My_Theme" parent="Theme.Sherlock"> 
    <item name="android:popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
    <item name="popupMenuStyle">@style/MyApp.PopupMenuStyle</item> 
</style> 

<style name="MyApp.PopupMenuStyle" parent="Widget.Sherlock.ListPopupWindow"> 
    <item name="android:popupBackground">@drawable/menu_item_background</item> 
</style> 

Espero que esto ayude.

3

He utilizado este, y su trabajo para mí

<style name="MyDropDownItem" parent="Widget.Sherlock.Spinner.DropDown.ActionBar"> 
    <item name="android:background">@drawable/spinner_background_holo_light</item> 
    <item name="android:popupBackground">@color/actionbar_normal</item> 
    <item name="android:dropDownSelector">@drawable/list_selector_holo_light</item> 
</style> 

<style name="myTheme" parent="@style/Theme.Sherlock"> 
    ... 
    ... 
    ... 
    <item name="android:actionDropDownStyle">@style/MyDropDownItem</item> 
    <item name="actionDropDownStyle">@style/MyDropDownItem</item> 
</style> 

donde,

"spinner_background_holo_light" y "list_selector_holo_light" son selectores

y

dibujable "actionbar_normal" (imagen O color)

2

No estoy seguro de si esta pregunta ha sido respondida de manera satisfactoria, pero me encontré con este problema y no encontré la respuesta que me gustaba.Parecía que tenía una configuración bastante estándar de ActionBarSherLock y el uso de la navegación desplegable me dio algunos malos resultados fuera de la caja. Texto negro sobre fondo negro. Quiero hacer que el texto sea blanco Así es como yo lo logró:

Para empezar, tema básico de mi aplicación se extiende Theme.Sherlock:

<style name="AppBaseTheme" parent="Theme.Sherlock"> 
</style> 

Mi tema aplicación real AppTheme extiende mi base (no puedo recordar por qué lo hice en el tiempo, es probablemente innecesario).

<style name="AppTheme" parent="AppBaseTheme"> 
    <item name="spinnerItemStyle">@style/SpinnerItemStyle</item> 
    <item name="android:spinnerItemStyle">@style/SpinnerItemStyle</item> 
</style> 

que necesitaba para anular Widget.Sherlock.TextView.SpinnerItem y así como a continuación:

<style name="SpinnerItemStyle" parent="Widget.Sherlock.TextView.SpinnerItem"> 
<item name="android:textAppearance">@style/TextAppearance.MySpinnerItem</item> 
</style> 

La razón para hacer esto era para tener acceso el widget TextApperance: TextAppearance.Sherlock.Widget.TextView.SpinnerItem

Este fue anulada de la siguiente manera:

<style name="TextAppearance.MySpinnerItem" parent="TextAppearance.Sherlock.Widget.TextView.SpinnerItem"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:textSize">16sp</item> 
    <item name="android:textStyle">normal</item> 
</style> 

Mi mayor error al atar para obtener t El texto al tratar de arreglar esto intentaba establecer directamente textColor en el SpinnerItemStyle reemplazado. Como usaba un widget textAppearance, simplemente no funcionaba.

Entonces mi código para hacer este trabajo es similar a esto (en el método onCreate de mi actividad):

SpinnerAdapter spinnerAdapter = ArrayAdapter.createFromResource(this, 
      R.array.call_type, R.layout.sherlock_spinner_item); 

OnNavigationListener onNavigationListener = new OnNavigationListener() { 
     // Get the same strings provided for the drop-down's ArrayAdapter 
     String[] strings = getResources().getStringArray(R.array.call_type); 

     @Override 
     public boolean onNavigationItemSelected(int position, long itemId) { 
      String filter = strings[position]; 
      filterCalls(filter); 
      return true; 
     } 
    }; 

ActionBar actionBar = getSupportActionBar(); 
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    actionBar.setListNavigationCallbacks(spinnerAdapter, 
      onNavigationListener); 

Esto permitió a mi para cambiar el color del texto, en la caída hacia abajo mediante spinner ActionBarSherlock.

Cuestiones relacionadas