2015-10-27 188 views
13

如何在Android中指定一個微調第一/最後一個項目的頂部/底部的微胖?請參閱下面的Goolge示例(8 dp間距)。 Google Simple Menu頂部/底部填充的微調

+0

嘗試這些鏈接[第一鏈接](http://stackoverflow.com/questions/17407626/custom-layout-for-spinner-item)[第二鏈接](http://stackoverflow.com/questions/8946893/ android-custom-spinner-layout)[示例程序](http://mrbool.com/how-to-customize-spinner-in-android/28286)希望本幫助完整 –

回答

3

微調不支持多視圖類型。 Issue

我你使用對話框顯示您的列表建議。

編輯

根據您的評論解決您的問題,此question

+0

唯一的解決方案似乎是這一個。我發現它跟隨你的鏈接。http://stackoverflow.com/a/16400899/519790 – multiholle

2

您需要使用自定義佈局爲您創建一個自定義適配器Spinner。因此,您只需提供具有適當邊距/ paddins的佈局。

Spinner spinner = (Spinner) findViewById(R.id.myspinner); 
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.data, R.layout.spinner_item); 
adapter.setDropDownViewResource(R.layout.spinner_dropdown_item); 
spinner.setAdapter(adapter); 

你可以找到一個有效的例子here

1

只需創建要在微調顯示的項目一個單獨的佈局。

像這樣的事情

spinner_text_view.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/customTextView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:padding="15dp" 
android:text="@string/sample_list_item" 
android:textColor="@android:color/black" 
android:textSize="20sp" /> 

然後在你的活動/片段,您可以創建一個適配器(陣列適配器是在這種情況下,簡單的),並通過這種佈局是適配器參考。最後將該適配器設置爲微調器,您可以獲得所需的結果。

示例代碼。

private void setupSpinner() { 
    String[] sampleSpinnerItems = {"One", "Two", "Three", "Four", "Five"}; 
    ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<String>(this, 
      R.layout.spinner_text_view, sampleSpinnerItems); 
    sampleSpinner.setAdapter(spinnerAdapter); 
}  

希望這會有所幫助。

注:spinner_text_view是你剛纔創建的佈局文件。

+0

這不會給我額外的填充第一個和最後一個項目之後。 – multiholle

1

您需要自定義適配器用於此和自定義佈局。 您可以使用2種佈局。假設你有n個元素可以顯示,在你的微調中你將有n + 2個。如果位置爲0(第一個元素)或最後一個元素,您將顯示空白布局,否則您將顯示其他佈局。 將用於建立這個空間的空佈局

1

你可以做到這一點使用自定義AdapterSpinner。它看起來是這樣的:

class YourAdapter extends BaseArrayAdapter<YourObject> { 

    @Override 
    public View getDropDownView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = inflater.inflate(R.layout.your_item, parent, false); 
      DropDownViewHolder holder = new DropDownViewHolder(); 
      holder.root = convertView.findViewById(R.id.drop_down_root); 
      // other assignments etc. 
      convertView.setTag(holder); 
     } 
     DropDownViewHolder holder = (DropDownViewHolder) convertView.getTag(); 
     int bottomPadding = 0; 
     int topPadding = 0; 
     if (position == 0) { 
      topPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); 
     } else if (position == (getCount() - 1)) { 
      bottomPadding = getContext().getResources().getDimensionPixelSize(R.dimen.margin_8); 
     } 

     holder.root.setPadding(0, topPadding, 0, bottomPadding); 
     // other UI related logic etc. 
     return convertView; 
    } 

    // ... 

    public static class DropDownViewHolder { 
     View root; 
     // other views 
    } 
} 

與設置微胖其實邏輯可以改變改變一些存根視圖能見度VISIBLE或取決於所處的位置誇大一些其他的佈局,但與填充的解決方案似乎更自然的我。