2013-04-01 9 views
1

У меня есть spinner (sherlock), помещенный в панель действий, который отображает 5 вариантов выбора пользователя, как показано ниже. до сих пор все в порядке. Но я хотел, чтобы счетчик был правильно выровнен на панели действий. Также элементы счетчика должны быть выровнены по центру. Любая идея, как это можно сделать?Android - список навигации стиль

enter image description here

ответ

1

Вы должны создать свой собственный адаптер вращателя.

Вы можете получить все, что вы хотите, вот пример:

enter image description here

Вот код, чтобы использовать пользовательский кок:

Context context = getSupportActionBar().getThemedContext(); 

    ArrayList<AbMenu> data = new ArrayList<AbMenu>(); 
    data.add(new AbMenu(isDark ? R.drawable.ic_action_spinner_partiemultidark : R.drawable.ic_action_spinner_partiemulti, getString(R.string.m1), 1)); 
    data.add(new AbMenu(isDark ? R.drawable.ic_action_spinner_partiemultidark : R.drawable.ic_action_spinner_partiemulti, getString(R.string.m8), 2)); 
    data.add(new AbMenu(isDark ? R.drawable.ic_action_spinner_partiedark : R.drawable.ic_action_spinner_partie, getString(R.string.s31), 5)); 
    data.add(new AbMenu(isDark ? R.drawable.ic_action_spinner_savedark : R.drawable.ic_action_spinner_save, getString(R.string.m2), 3)); 
    data.add(new AbMenu(isDark ? R.drawable.ic_action_spinner_partiehelpdark : R.drawable.ic_action_spinner_partiehelp, getString(R.string.m3), 4)); 

    AbMenuAdapter adapter = new AbMenuAdapter(context, R.layout.ab_spinner_item, data); 

    getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_LIST); 
    getSupportActionBar().setListNavigationCallbacks(adapter, this); 

Класс, который я использую для заполнения адаптер.

public class AbMenu { 
    public int icon; 
    public String title; 
    public int id; 

    public AbMenu() { 
     super(); 
    } 

    public AbMenu(int icon, String title, int id) { 
     super(); 
     this.icon = icon; 
     this.title = title; 
     this.id = id; 
    } 
} 

Адаптер (это изображение рядом с TextView), который использует пользовательский макет:

public class AbMenuAdapter extends BaseAdapter implements SpinnerAdapter { 

    Context context; 
    int layoutResourceId; 
    ArrayList<AbMenu> data; 
    LayoutInflater inflater; 

    public AbMenuAdapter(Context a, int textViewResourceId, ArrayList<AbMenu> data) { 
     // super(a, textViewResourceId, data); 
     this.data = data; 
     inflater = (LayoutInflater) a.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     this.context = a; 
     this.layoutResourceId = textViewResourceId; 

    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      v = inflater.inflate(layoutResourceId, null); 
     } 
     final AbMenu item = data.get(position); 
     if (item != null) { 
      ((android.widget.TextView) v.findViewById(R.id.textViewSpinner)).setText(item.title); 
      ((ImageView) v.findViewById(R.id.imageViewSpinner)).setImageResource(item.icon); 
     } 
     return v; 
    } 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     View v = convertView; 
     if (v == null) { 
      v = inflater.inflate(layoutResourceId, null); 
     } 
     final AbMenu item = data.get(position); 
     if (item != null) { 
      ((android.widget.TextView) v.findViewById(R.id.textViewSpinner)).setText(item.title); 
      ((android.widget.TextView) v.findViewById(R.id.textViewSpinner)).setTextSize(TypedValue.COMPLEX_UNIT_DIP, 16); 
      ((ImageView) v.findViewById(R.id.imageViewSpinner)).setImageResource(item.icon); 
     } 
     return v; 
    } 

    @Override 
    public int getCount() { 
     return data.size(); 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 

     return 0; 
    } 
} 

И файл XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="fill_parent" 
android:layout_marginBottom="8dp" 
android:layout_marginLeft="4dp" 
android:layout_marginRight="4dp" 
android:layout_marginTop="8dp" 
android:gravity="fill_horizontal" > 

<ImageView 
    android:id="@+id/imageViewSpinner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center_vertical" 
    android:contentDescription="@string/empty" 
    android:padding="4dp" 
    android:src="@drawable/ic_launcher" /> 

<TextView 
    android:id="@+id/textViewSpinner" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_gravity="center_vertical" 
    android:layout_marginLeft="8dp" 
    android:layout_marginRight="16dp" 
    android:layout_toRightOf="@+id/imageViewSpinner" 
    android:text="@string/empty" 
    android:ellipsize="end" 
    android:singleLine="true" /> 

</RelativeLayout> 
+0

спасибо. Как вы могли бы знать, что я получил это из панели действий sherlock, как показано здесь http://pastebin.com/uk6qHgY7. могу ли я внести некоторые изменения в библиотеку, чтобы повернуть выравниватель прямо вправо. Например: настройка прокладки и т. Д.?? –

+1

Думаю, вы могли бы. Перейдите в проект ActionBarSherlock и откройте файл sherlock_spinner_item.xml в папке res/layout (и layout-v14). Это тот, который используется по умолчанию. Это простой текстовый вид, вам просто нужно добавить 'gravity =" center ", и он должен работать. –

+0

он работает. Но я хотел, чтобы весь счетчик был перемещен в полный правый конец. Это возможно? –

Смежные вопросы