Android学习之八:使用选择性widgets(using selection widgets)

说到选择样式widgets我们得首先要了解Android adapters,它为选择样式的widgets提供常规数据接口。最简单的adapter是使用ArrayAdapter,如下所示:

String[] items={“this”,”is”,”a”,”really”,”silly”,”list”};

new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);

ArrayAdapter构造器有三个参数:

  • The Context to use (typically this will be your activity instance) ,是你的activity实例。
  • 要使用的view的资源ID。
  • 要显示的包含数据的数组。

1.ListView:最经常用到列表 widget要算ListView了,在代码中调用setAdapter()来设置显示数据和子视图,并且通过调用setOnItemSelectedListener()来监听选择项的改变。当然如果你的activity中只有一个单独的列表框,你可以使activity继承于ListActivity,你也不需要改变布局,列表会填满屏幕。如果你想自己定义布局,你可以在ListView中定义id为”@android:id/list”,ListActivity会知道哪个 widget是activity的主列表。下面看一个实例:

xml代码:

<LinearLayout
  xmlns:android=”http://schemas.android.com/apk/res/android”
  android:orientation=”vertical”
  android:layout_width=”fill_parent” 
  android:layout_height=”fill_parent” >
  <TextView android:id=”@+id/selection”
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”     
  />
  <ListView android:id=”@android:id/list”
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”
              android:drawSelectorOnTop=”false”
  />

  </LinearLayout>

java代码:

public class NowActivity extends ListActivity  {
    /** Called when the activity is first created. */
    TextView selection;
    String[] items={“lorem”, “ipsum”, “dolor”, “sit”, “amet”,
              “consectetuer”, “adipiscing”, “elit”, “morbi”, “vel”,
              “ligula”, “vitae”, “arcu”, “aliquet”, “mollis”,
              “etiam”, “vel”, “erat”, “placerat”, “ante”,
              “porttitor”, “sodales”, “pellentesque”, “augue”, “purus”};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       this.setListAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items));
        selection=(TextView)this.findViewById(R.id.selection);
    }   
   public void onListItemClick(ListView parent,View v,int position,long id){
        selection.setText(items[position]);
    }   
}

  • 在java代码中可以调用ListView的setChoiceMode()来改变选择模式,支持的值有CHOICE_MODE_SINGLE或者CHOICE_MODE_MULTIPLE,在ListActivity中你可以通过调用 getListView()来获取ListView。
  • ArrayAdapter的构造函数中参数android.R.layout.simple_list_item_1值之外,还可以使用android.R.layout.simple_list_item_single_choice或者android.R.layout.simple_list_item_multiple_choice
  • 可以调用ListView的getCheckedItemPositions()来获取已经选定项的位置。

2.Spinner:在android中Spinner相当于下来列表框。像ListView一样,可以通过调用setAdapter()来为数据和子视图提供adapter。当下拉列表显示时如果你想要调整视图,你需要通过配置adapter而不是Spinner widget。使用setDropDownViewResource()方法为使用的视图提供资源ID,使用xml来设置自己的下拉列表样式。看下面的代码:

<LinearLayout
  xmlns:android=”http://schemas.android.com/apk/res/android”
  android:orientation=”vertical”
  android:layout_width=”fill_parent”
  android:layout_height=”fill_parent”
  >
    <TextView android:id=”@+id/selection”
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”
    />
    <Spinner android:id=”@+id/spinner”
             android:layout_width=”fill_parent”
             android:layout_height=”wrap_content”
    />
  </LinearLayout>

java代码:

public class NowActivity extends Activity implements OnItemSelectedListener  {
    TextView selection;
    String[] items={“lorem”, “ipsum”, “dolor”, “sit”, “amet”,
              “consectetuer”, “adipiscing”, “elit”, “morbi”, “vel”,
              “ligula”, “vitae”, “arcu”, “aliquet”, “mollis”,
              “etiam”, “vel”, “erat”, “placerat”, “ante”,
              “porttitor”, “sodales”, “pellentesque”, “augue”, “purus”};
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        selection=(TextView)this.findViewById(R.id.selection);      
Spinner spin=(Spinner)this.findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
ArrayAdapter<String> aa=new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item,items);
        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item)
;//在这里可以是自己定义的xml样式
        spin.setAdapter(aa);
    }   
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int position,
            long id) {
        selection.setText(items[position]);
    }
@Override
    public void onNothingSelected(AdapterView<?> arg0) {

        selection.setText(“”);
    }   
}

3.GridView:

  • android:numColumns:有多少列,或者你可以设置值”auto_fit”,android会根据可用空间自动计算。
  • android:verticalSpacing和android:horizontalSpacing: 指出在grid中两项之间的空白间隔。
  • android:columnWidth:指出列的宽度。
  • android:stretchMode:缩放与列宽大小同步。

举个例子,如果你的屏幕有320px宽度,你设置android:columnWidth=”100px” 和android:horizontalSpacing=”5px”,android:numColumns=”3”,那么3列使用310px(3个 100px列宽和2个5px间隔)。如果android:stretchMode=”columnWidth”,那么3个列的宽度都会相应增加来分配掉剩余的10px,如果android:stretchMode=”spacingWidth”,则空白间隔会增加来分配剩余的10px。

看示例:

xml代码:

<LinearLayout
  xmlns:android=”http://schemas.android.com/apk/res/android”
  android:orientation=”vertical”
  android:layout_width=”fill_parent”
  android:layout_height=”fill_parent”
  >
  <TextView android:id=”@+id/selection”
              android:layout_width=”fill_parent”
              android:layout_height=”wrap_content”
  />
  <GridView android:id=”@+id/grid”
              android:layout_width=”fill_parent”
              android:layout_height=”fill_parent”
               android:verticalSpacing=”35px”
              android:horizontalSpacing=”5px”
              android:numColumns=”auto_fit”
              android:stretchMode=”columnWidth”
              android:gravity=”center”
  /> 
</LinearLayout>

posted @ 2010-12-07 11:25  古韵古风  阅读(1631)  评论(0编辑  收藏  举报