Note that there are some explanatory texts on larger screens.

plurals
  1. POActionBarSherlock list navigation with icon and title
    text
    copied!<p>I am developing an application where navigation is done by using the spinner on the action bar. Spinner items needed to include icons as well so I created custom layouts for that.The problem is that spinner is too wide with respect to its items. I am using ActionBarSherlock. The codes I wrote so far:</p> <p><strong>navigation_list_item.xml:</strong></p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;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"&gt; &lt;ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="match_parent" android:adjustViewBounds="true" android:padding="4dip"/&gt; &lt;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"/&gt; &lt;/LinearLayout&gt; </code></pre> <p><strong>navigation_list_dropdown_item.xml:</strong></p> <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;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" &gt; &lt;ImageView android:id="@+id/icon" android:layout_width="wrap_content" android:layout_height="?attr/dropdownListPreferredItemHeight" android:adjustViewBounds="true" android:padding="4dip"/&gt; &lt;TextView android:id="@+id/title" style="?attr/spinnerDropDownItemStyle" android:layout_width="match_parent" android:layout_height="?attr/dropdownListPreferredItemHeight" android:ellipsize="marquee" android:singleLine="true" /&gt; &lt;/LinearLayout&gt; </code></pre> <p><strong>NavigationListAdapter.java:</strong></p> <pre><code>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; } } </code></pre> <p><strong>onCreate method of the activity:</strong></p> <pre><code> @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 &lt; 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); } </code></pre> <p>An illustration of the problem: <img src="https://i.stack.imgur.com/dsx2R.png" alt="enter image description here"></p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload