2011-09-22 42 views

回答

45

爲您的微調這樣的適配器,

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.my_spinner_style,array_of_values) { 

    public View getView(int position, View convertView,ViewGroup parent) { 

     View v = super.getView(position, convertView, parent); 

     ((TextView) v).setTextSize(16); 

     return v; 

    } 

    public View getDropDownView(int position, View convertView,ViewGroup parent) { 

     View v = super.getDropDownView(position, convertView,parent); 

     ((TextView) v).setGravity(Gravity.CENTER); 

     return v; 

    } 

}; 

現在你的佈局R.layout.my_spinner_style

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+android:id/text1" 
style="?android:attr/spinnerItemStyle" 
android:singleLine="true" 
android:textColor="#ffffff" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:ellipsize="marquee" /> 

現在將此適配器設置爲您的微調器,

spinner.setAdapter(adapter); 
+0

幾個主題可能需要將微調器的水平填充設置爲0(或任何其他值,只要兩邊相等)以覆蓋可能偏移內部佈局的微調器細節。 – CurlyCorvus

34

您需要爲旋轉器項目設置自己的佈局。

SpinnerAdapter adap = new ArrayAdapter<String>(this, R.layout.spinner_item, new String[]{"A", "B", "C"}); 
spriner.setAdapter(adap); 

哪裏R.layout.spinner_item是內容佈局:

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:gravity="center" 
    android:textColor="#000000" 
    android:text="Sample Text" 
    android:paddingBottom="5dp" 
    android:paddingTop="5dp"></TextView> 
+0

如果微調模式是彈出對話框,這不起作用 –

-8

讓我完整的答案。在Spinner中騰出空間也很重要。

錯誤:

<Spinner 
android:id="@+id/spinner" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
/> 

右:

<Spinner 
android:id="@+id/spinner" 
android:layout_width="100dp" 
android:layout_height="wrap_content" 
/> 
3

晚了比賽,但我想補充這爲未來的用戶只是因爲我發現我的問題的簡單解決方案。它允許我在不創建自定義佈局的情況下集中簡單的文本。使用padding

<Spinner 
    android:id="@+id/example_spinner" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:paddingLeft="10dp" 
    android:paddingRight="10dp" 
    android:paddingTop="2dp" 
    android:paddingBottom="2dp" /> 

我成功地使用這種方法我的微調內定中心我的文字我這樣做的方式是。這可能只適用於簡單的情況,但您可能想要爲更復雜的情況使用自定義佈局。這只是爲了保持你的XML文件,避免使用自定義佈局只是爲了居中一個簡單的微調。

+0

這是否確實將文本置於所有設備上?或者它只適用於特定屏幕尺寸的特定設備? –

5

此作品,未經佈局更改

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
       ((TextView) adapterView.getChildAt(0)).setGravity(Gravity.CENTER); 
     } 
}); 
+0

當從縱向旋轉到橫向時,應用程序「崩潰」。 – oskarko

+0

@oskarko發佈logcat,也許我們可以幫你 – Borja

+0

沒關係。我找到了更好的解決方案http://stackoverflow.com/questions/7511049/set-view-text-align-at-center-in-spinner-in-android/7511272#7511272 – oskarko

9

這是非常簡單的,只需創建一個xml文件命名爲spinner_item.xml與內容

<TextView 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:textColor="#111111" 
android:padding="10dp" 
android:textAlignment="center" 
/> 

現在加入Android的默認的你java類,inspite查看資源添加您的自定義查看資源爲

ArrayAdapter<String> adapter= new ArrayAdapter<String>(context, R.layout.spinner_item, myList); 
adapter.setDropDownViewResource(R.layout.spinner_item); 

textAlignment行將執行此操作。

+0

這就是正確的答案。至少對於我來說,重力導致其他任何事情都沒有。 – Ivan

+0

這應該是公認的答案,謝謝。 – j2emanue

+0

是的,這是它。它完美地工作 – Thecarisma