如果套用simple_spinner_item或是simple_spinner_dropdown_item,然后直接在Spinner中用
android:gravity="center"
是無法讓Spinner中的文字居中的。
這是因為Spinner中的文字其實是套在TextView中的(參考:http://www.douban.com/note/483280526/?type=like#sep)。
一開始我想到的一種辦法:
在spinner外面嵌套一個LinearLayout,設置android:gravity="center",這樣spinner自然就居中了。這樣的缺點是只能設置Spinner為Wrap_content了。
其實可以這樣:
simple_spinner_item.xml和simple_spinner_dropdown_item.xml其實都是在sdk\platforms\android-18\data\res\layout中的,那么我們可以覆寫他們。
比如這樣覆寫:

把TextView中的gravity改一下,這個問題就解決了。
另外,StackOverflow上還有人給出其他的方法:
The component that actually creates the items for the
Spinneris the adapter. So you should customize it (by overriding thegetView()method) to return centeredTextViewwidgets.In your case, replace the
new ArrayAdapter<String> ...initialization with this code:ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, NomProjets) { @Override public View getView(int position, View convertView, ViewGroup parent) { return setCentered(super.getView(position, convertView, parent)); } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return setCentered(super.getDropDownView(position, convertView, parent)); } private View setCentered(View view) { TextView textView = (TextView)view.findViewById(android.R.id.text1); textView.setGravity(Gravity.CENTER); return view; } };
