2013-04-01 34 views
1

我有一個微調器(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項目並在res/layout(和layout-v14)文件夾中打開文件sherlock_spinner_item.xml。這是默認使用的那個。這是一個簡單的文本視圖,你只需要添加'gravity =「center」'它應該可以工作。它的工作原理是 –

+0

。但我希望整個微調器都移到完整的右端。那可能嗎? –