來自:http://my.oschina.net/kut/blog/30564
剛接觸Android平台編程不久,被爛教材整得頭暈。
有一個關於Spinner擴充的問題,問題是,怎麼把彈出來的菜單自訂。當然,書上是沒有告訴你的,它們壓根就不知道那個和ArrayAdapter相關的兩個layout關聯到底是什麼回事說清楚,就這麼列了個代碼就算了。我很頭暈,於是,寫代碼,驗證自己的推測,搞了好久才“哦”一聲解決了自己的疑問。
而自訂Spinner則是和這兩個layout有關,ArrayAdapter中初始化的那個layout,是用來渲染spinner被選擇的item的樣式,而setDropDownResource這個layout,則是彈出框時用的item樣式。也就是說,這個spinner使用了兩個列表,只不過第一個列表只是顯示了一行而已。
下面列個代碼,大家仔細看就明白了(因為中午沒睡,現在太困了,沒精力寫為什麼了,估計大家能看得懂)。
01 |
<? xml version = "1.0" encoding = "utf-8" ?> |
03 |
< LinearLayout xmlns:android = "http://schemas.android.com/apk/res/android" |
04 |
android:layout_width = "fill_parent" |
05 |
android:layout_height = "fill_parent" |
06 |
android:padding = "10dip" > |
08 |
< ImageView android:id = "@+id/icon" |
09 |
android:src = "@drawable/tick" |
10 |
android:layout_marginRight = "10dip" |
11 |
android:layout_width = "wrap_content" |
12 |
android:layout_height = "wrap_content" |
13 |
android:visibility = "invisible" /> |
15 |
< TextView android:id = "@+id/label" |
16 |
android:layout_width = "wrap_content" |
17 |
android:layout_height = "wrap_content" |
18 |
android:layout_toRightOf = "@id/icon" |
19 |
android:textColor = "#000000" |
20 |
android:textSize = "22dip" /> |
01 |
public class CustomSpinnerActivity
extends Activity { |
02 |
public Spinner spinner; |
04 |
public void
onCreate(Bundle savedInstanceState) { |
05 |
super .onCreate(savedInstanceState); |
06 |
setContentView(R.layout.ch07_custom_spinner); |
08 |
Resources res = getResources(); |
09 |
CharSequence[] platforms = res.getTextArray(R.array.platforms); |
11 |
spinner = (Spinner) findViewById(R.id.target); |
13 |
ArrayAdapter<CharSequence> adapter = new
ArrayAdapter<CharSequence>( this , android.R.layout.simple_spinner_item, platforms) { |
15 |
public View getDropDownView( int
position, View convertView, ViewGroup parent) { |
16 |
View view = getLayoutInflater().inflate(R.layout.ch07_custom_spinner_item, parent, false ); |
18 |
TextView label = (TextView) view.findViewById(R.id.label); |
19 |
label.setText(getItem(position)); |
21 |
if (spinner.getSelectedItemPosition() == position) { |
22 |
label.setTextColor(getResources().getColor(R.color.selected_fg)); |
23 |
view.setBackgroundColor(getResources().getColor(R.color.selected_bg)); |
24 |
view.findViewById(R.id.icon).setVisibility(View.VISIBLE); |
30 |
spinner.setAdapter(adapter); |
btw:我也來接觸android了?沒辦法,為了應付GCD,曲線救國,希望能趕得上,還有整整四個月時間讓我去深入這一領域。