ActionBarSherlock lista de navegación con el icono y el título
Estoy desarrollando una aplicación donde la navegación se hace usando el hilandero en la barra de acción. Spinner artículos necesarios para incluir los iconos así que he creado diseños personalizados para that.The problema es que el hilandero es demasiado amplio con respecto a sus elementos. Estoy utilizando ActionBarSherlock. Los códigos que escribí hasta ahora:
Navigation_list_item.xml:
- Divisor no funciona para TitlePageIndicator con viewpagerindicator & actionbarsherlock
- Light.DarkActionBar elemento de menú color de texto inalterable?
- Ocultar ActionBar MenuItems cuando se desliza el cajón de navegación para cualquier cantidad
- ActionBarsherlock cómo establecer divisores en elementos de menú con sólo iconos
- Modo de pantalla completa usando ActionBarSherlock en dispositivos que ejecutan API <11
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center_vertical" android:orientation="horizontal"> <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="match_parent" android:adjustViewBounds="true" android:padding="4dip"/> <TextView android:id="@+id/title" style="?attr/spinnerItemStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:ellipsize="marquee" android:singleLine="true" android:layout_gravity="center_vertical"/> </LinearLayout>
Navigation_list_dropdown_item.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:orientation="horizontal" > <ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="?attr/dropdownListPreferredItemHeight" android:adjustViewBounds="true" android:padding="4dip"/> <TextView android:id="@+id/title" style="?attr/spinnerDropDownItemStyle" android:layout_width="match_parent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:ellipsize="marquee" android:singleLine="true" /> </LinearLayout>
NavigationListAdapter.java:
public class NavigationListAdapter extends BaseAdapter{ private Drawable[] mIcons; private String[] mTitles; private Context mContext; private LayoutInflater mInflator; public NavigationListAdapter(Context context, Drawable[] icons, String[] titles){ mContext = context; mInflator = (LayoutInflater)mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE); mIcons = icons; mTitles = titles; } @Override public int getCount() { return mTitles.length; } @Override public Object getItem(int position) { return mTitles[position]; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null){ convertView = mInflator.inflate(R.layout.navigation_list_item, parent, false); holder = new ViewHolder(); holder.icon = (ImageView)convertView.findViewById(R.id.icon); holder.title = (TextView)convertView.findViewById(R.id.title); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } holder.title.setText(mTitles[position]); holder.icon.setImageDrawable(mIcons[position]); return convertView; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { ViewHolder holder; if(convertView == null){ convertView = mInflator.inflate(R.layout.navigation_list_dropdown_item, parent, false); holder = new ViewHolder(); holder.icon = (ImageView)convertView.findViewById(R.id.icon); holder.title = (TextView)convertView.findViewById(R.id.title); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } holder.title.setText(mTitles[position]); holder.icon.setImageDrawable(mIcons[position]); return convertView; } private class ViewHolder{ public ImageView icon; public TextView title; } }
OnCreate método de la actividad:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Context context = getSupportActionBar().getThemedContext(); TypedArray ta = getResources().obtainTypedArray(R.array.leagues); Drawable[] logos = new Drawable[ta.length()]; for(int i = 0; i < logos.length; i++){ logos[i] = ta.getDrawable(i); } NavigationListAdapter adapter = new NavigationListAdapter(context, logos, getResources().getStringArray(R.array.league_names)); getSupportActionBar().setDisplayShowTitleEnabled(false); getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); getSupportActionBar().setListNavigationCallbacks(adapter, null); }
Una ilustración del problema:
- Android: actionBarStyle requiere nivel de API 11
- ¿Es posible cambiar el indicador de pestaña de la barra de acciones programáticamente?
- ActionBarSherlock + Tabbed Fragments + ViewPager insider un fragmento
- Android ListView problemas en Android 2.X
- El contenido de la ficha permanece visible después de cambiar la pestaña después del cambio de orientación
- Android HoloEverywhere: mChildFragmentManager no se puede resolver con una variable
- Atributos de altura de ActionBarSherlock en sdk bajo
- ViewPager + Fragmentos - Fragmento no mostrado
Tal vez el cambio de la anchura de su textview en navigation_list_dropdown_item.xml a wrap_content tenga efecto (si el cambio de ancho de LinearLayout no funciona). Puede ver esto en: http://dandar3.blogspot.com.es/2013/03/actionbarsherlock-custom-list-navigation.html .