• 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>

  • 相关阅读:
    接下来是沉重的一堆任务啊!
    wxPython入门(一)
    一个比较好玩的东西——硬链接
    Python打印本机IP
    voddown.py v0.3 基本上就这样吧
    Python的正则表达式
    【转】Python命名习惯
    bat命令
    试用了GIMP的Smart remove selection,结果有些失望啊,哈哈
    STM32学习笔记(1)——搭建库函数工程
  • 原文地址:https://www.cnblogs.com/zjmsky/p/1898839.html
Copyright © 2020-2023  润新知