第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView

GridView(网格视图)

1.概述:(用法与ListView相同)

GriedView用于在界面上按照行、列分布的方式来显示多个组件。GriedView和ListView有共同的父类:AbsListView,因此它们有很多相似之处,都是列表项,但唯一的区别是:
GriedView时可以显示多列,ListView只显示一列。所以这样说,ListView是一种特殊的GriedView。
其他相似之处:体现在都需要adapter来传数据,点击事件相同。

2.xml属性:

特殊:
numColums=”” //表示几列,默认1列
stretchMode=”” //设置拉伸模式

3.小知识补充:

获得LayoutInflater的几种方式:
1)LayoutInflater flater = getLayoutInflater();//最常用
2)LayoutInflater flater = LayoutInflater.from(this);
3)LayoutInflater flater = getSystemService(*);//不常用

4.补充:

在ListView的例子基础上,使一点击就出现蒙版:
xml:item中加上蒙版透明色,这里的宽和长度与图片一致。

<ImageView 
        android:id="@+id/image_hint"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignRight="@id/imageView"
        android:layout_alignBottom="@id/imageView"
        android:background="#55ff0000"
        android:visibility="invisible"/>

dapter中加上:

//设置使点击选中时,出现蒙版。
        if(mCheckedPosition[position]){
            vh.image_hint.setVisibility(View.VISIBLE);
        }else{
            vh.image_hint.setVisibility(View.INVISIBLE);
        }

效果演示:
第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第1张图片

AutoCompleteTextView(自动完成文本框)

1.概述:

AutoCompleteTextView是从EditText派生出的,实际上它是编辑框,但多的功能是:可以自动会显示一个下拉菜单,供用户从中选择。

2.xml属性:

completionThreshold=”” //设置用户至少输入几个字符才会显示提示

3.AutoCompleteTextView派生出了一个子类:MultiAutoCompleteTextView,它允许输入多个提示项。

范例:
xml:

<AutoCompleteTextView android:id="@+id/autotext" android:layout_width="match_parent" android:layout_height="wrap_content"/>

java:

public class MainActivity extends Activity {
    private AutoCompleteTextView mAutotext;
    private ArrayAdapter<String> adapter;
    private String[] mList={"beijing_changping","biejing_wuhuan","beijing_gugogn","shanghai_hai","shangjing","tianjin","tianjin_yihe","sd","shandong"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mAutotext=(AutoCompleteTextView) findViewById(R.id.autotext);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,mList);
        mAutotext.setAdapter(adapter);


    }

}

结果演示:
第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第2张图片

Spinner (列表选择框)

1.概述:

Spinner是一个列表选择框,它和Gallery都继承了AbsSpinner,所以只要为其提供Adapter即可。

2.常用xml属性;

entries=”” 使用数组资源设置下拉列表框的列表项目(AbsSpinner中定义的)
popupBackground=”” 设置下拉列表框的背景色
prompt=”” 设置列表选择框的提示信息

范例:
xml:

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

java:

public class MainActivity extends Activity {
    private Spinner mSpinner;

    private ArrayAdapter<String> adapter;
    private String[] mList={"beijing_changping","biejing_wuhuan","beijing_gugogn","shanghai_hai","shangjing","tianjin","tianjin_yihe","sd","shandong"};

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mSpinner=(Spinner) findViewById(R.id.spinner);
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item,mList);
        mSpinner.setAdapter(adapter);

    }   
}

第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第3张图片

Gallery(被抛弃)(画廊视图)

1.概述:

与listview的区别,在于listview时上下滑动,gallery是左右滑动。

2.xml属性:

spacing=”” 左右的距离
unselectedAlpha=”” 传入数值,例0.5 让没有居中的子项透明,数字越小,透明度越高

<Gallery android:id="@+id/gallery" android:layout_width="match_parent" android:layout_height="wrap_content" android:spacing="10dp" android:unselectedAlpha="0.6" />

3.监听事件:

1)setOnItemClickListener() //和listview用法相同
2)setOnItemSelectedListener() //特有:监听居中的控件
范例:

mGalleryview.setOnItemSelectedListener(new OnItemSelectedListener() {

            @Override
            public void onItemSelected(AdapterView<?> arg0, View arg1,
                    int position, long arg3) {
                Toast.makeText(MainActivity.this,list.get(position).getName() ,Toast.LENGTH_SHORT).show();


            }

            @Override
            public void onNothingSelected(AdapterView<?> arg0) {
                // TODO Auto-generated method stub

            }
        });

结果:
第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第4张图片

ExpandableListView(可展开列表)

1.概述:

ExpandableListView是ListView的子类(ListView属于ViewGroup支下)。它在ListView基础上进行了扩展,把列表项分为几组,每组又可包含多个列表项。
但ExpandableListView的实现需要由ExpandableListAdapter来提供列表项,ExpandableListAdapter是接口。(BaseExpandableListAdapter实现了它,所以只要自定义的适配器来继承BaseExpandableListAdapter即可。)
第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第5张图片

2.xml属性:

childDivider=”” //指定各组内各子列表项之间的分隔条
childIndicator=”” //显示在子列表旁边的Drawable对象
groupIndicator=”” //显示在组列表旁边的Drawable对象
groupIndicator=”@null” //去掉小三角号

3.自定义适配器时继承BaseExpandableListAdapter,需要实现的方法:

getGroupCount();返回包含的组列表项的数目。
getGroupView();返回的View对象将作为组列表项。
getChildrenCount();返回特定组所包含的子列表项的数量
getChildView();返回的View对象将作为特定组、特定位置的子列表项。

4.范例:

要求:建立一个组列表是clazz班级,字分组是puple的下拉列表:
思路:与以前的listview做法类似,只是需要做group的布局和child的布局,且clazz中包含puple的list表。生成两次view.

步骤:
1)xml控件设置
2)主界面获取
3)自定义适配器,继承BaseExpandableListAdapter。
4)数据model:
区别ListView:Group和Child都要写。
5)布局layout:
Group和Child的两个布局文件
model:

//Clazz.java文件:
public class Clazz {
    private String clazzName;
    private String clazzNum;
    private List<Puple> puples;
    //构造器
    public Clazz(String clazzName,String clazzNum){
        this.clazzName=clazzName;
        this.clazzNum=clazzNum;

    }
    public String getClazzName() {
        return clazzName;
    }
    public void setClazzName(String clazzName) {
        this.clazzName = clazzName;
    }
    public String getClazzNum() {
        return clazzNum;
    }
    public void setClazzNum(String clazzNum) {
        this.clazzNum = clazzNum;
    }
    public List<Puple> getPuples() {
        return puples;
    }
    public void setPuples(List<Puple> puples) {
        this.puples = puples;
    }


}


-------------------------------------
//Puple.java文件:
public class Puple {
    private String name;
    private String age;
    private String sex;
    //构造器
    public Puple(String name,String age,String sex){
        this.age=age;
        this.name=name;
        this.sex=sex;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getAge() {
        return age;
    }
    public void setAge(String age) {
        this.age = age;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }

}

dapter:

public class ExpandableAdapter extends BaseExpandableListAdapter{
    private List<Clazz> clazzs;
    private LayoutInflater flater;
    public ExpandableAdapter(List<Clazz> clazzs,LayoutInflater flater){
        this.clazzs=clazzs;
        this.flater=flater;

    }

    @Override
    public Object getChild(int arg0, int arg1) {
        // TODO Auto-generated method stub
        return arg1;
    }

    @Override
    public long getChildId(int arg0, int arg1) {
        // TODO Auto-generated method stub
        return arg1;
    }



    @Override
    public int getChildrenCount(int arg0) {
        // TODO Auto-generated method stub
        return clazzs.get(arg0).getPuples().size();
    }

    @Override
    public Object getGroup(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }

    @Override
    public int getGroupCount() {
        // TODO Auto-generated method stub
        return clazzs.size();
    }

    @Override
    public long getGroupId(int arg0) {
        // TODO Auto-generated method stub
        return arg0;
    }


    @Override
    public boolean hasStableIds() {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean isChildSelectable(int arg0, int arg1) {
        // TODO Auto-generated method stub
        return false;
    }

    //得到group的view
    @Override
    public View getGroupView(int position, boolean arg1, View converView, ViewGroup arg3) {
        converView=flater.inflate(R.layout.clazz_item_view, null);
        TextView clazzName =(TextView) converView.findViewById(R.id.textview_clazz_name);
        TextView clazzNum =(TextView) converView.findViewById(R.id.textview_clazz_num);
        //赋值
        Clazz clazz = clazzs.get(position);
        clazzName.setText(clazz.getClazzName());
        clazzNum.setText(clazz.getClazzNum());


        return converView;
    }
    //得到child的view
    @Override
    public View getChildView(int groupposition, int position, boolean arg2, View converView,
            ViewGroup arg4) {
        converView=flater.inflate(R.layout.puple_item_view, null);
        TextView pupleName =(TextView) converView.findViewById(R.id.textview_puple_name);
        TextView pupleAge=(TextView) converView.findViewById(R.id.textview_puple_age);
        TextView pupleSex=(TextView) converView.findViewById(R.id.textview_puple_sex);
        //赋值
        Puple puple = clazzs.get(groupposition).getPuples().get(position);
        pupleName.setText(puple.getName());
        pupleAge.setText(puple.getAge());
        pupleSex.setText(puple.getSex());

        return converView;
    }

}

主界面:

public class ExpandActivity extends Activity{
    private ExpandableListView mExpandView;
    private List<Clazz> clazzs;
    private ExpandableAdapter expand_adapter;
    private LayoutInflater flater;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_expand);
        mExpandView = (ExpandableListView) findViewById(R.id.expandView);
        init();
        flater = getLayoutInflater();
        expand_adapter = new ExpandableAdapter(clazzs, flater);
        mExpandView.setAdapter(expand_adapter);
    }

    private void init() {
        clazzs = new ArrayList<Clazz>();


        Clazz clazz1 = new Clazz("一班", "201501");
        List<Puple> puples1 = new ArrayList<Puple>();
        //建puple
        Puple puple1 = new Puple("王五", "23", "男");
        Puple puple2 = new Puple("是否", "23", "男");
        Puple puple3 = new Puple("阿凡达", "23", "女");
        Puple puple4 = new Puple("上当", "24", "女");
        Puple puple5 = new Puple("发给", "25", "男");
        Puple puple6 = new Puple("粉红色", "27", "男");
        //将puple传入list集合中
        puples1.add(puple1);
        puples1.add(puple2);
        puples1.add(puple3);
        puples1.add(puple4);
        puples1.add(puple5);
        puples1.add(puple6);
        //将拥有puple的list传给clazz1
        clazz1.setPuples(puples1);

        Clazz clazz2 = new Clazz("二班", "201502");
        List<Puple> puples2 = new ArrayList<Puple>();
        //建puple
        Puple puple21 = new Puple("王五", "23", "男");
        Puple puple22 = new Puple("是否", "23", "男");
        Puple puple23 = new Puple("阿凡达", "23", "女");
        Puple puple24 = new Puple("rain", "24", "女");
        Puple puple25 = new Puple("发给", "25", "男");
        Puple puple26 = new Puple("粉红色", "27", "男");
        //将puple传入list集合中
        puples2.add(puple1);
        puples2.add(puple2);
        puples2.add(puple3);
        puples2.add(puple4);
        puples2.add(puple5);
        puples2.add(puple6);
        //将拥有puple的list传给clazz1
        clazz2.setPuples(puples2);

        Clazz clazz3 = new Clazz("三班", "201503");
        List<Puple> puples3 = new ArrayList<Puple>();
        //建puple
        Puple puple31 = new Puple("王五", "23", "男");
        Puple puple32 = new Puple("re", "23", "男");
        Puple puple35 = new Puple("额", "25", "男");
        Puple puple36 = new Puple("粉红色", "27", "男");
        //将puple传入list集合中
        puples3.add(puple1);
        puples3.add(puple2);
        puples3.add(puple3);
        puples3.add(puple4);
        puples3.add(puple5);
        puples3.add(puple6);
        //将拥有puple的list传给clazz1
        clazz3.setPuples(puples3);

        Clazz clazz4 = new Clazz("四班", "201504");
        List<Puple> puples4 = new ArrayList<Puple>();
        //建puple
        Puple puple41 = new Puple("发给", "23", "男");
        Puple puple42 = new Puple("儿童", "23", "男");
        Puple puple43 = new Puple("阿凡达", "23", "女");
        Puple puple44 = new Puple("re人", "24", "女");
        //将puple传入list集合中
        puples4.add(puple1);
        puples4.add(puple2);
        puples4.add(puple3);
        puples4.add(puple4);
        puples4.add(puple5);
        puples4.add(puple6);
        //将拥有puple的list传给clazz1
        clazz4.setPuples(puples4);



        //将第一个clazz1添加到clazzs集合中。
        clazzs.add(clazz1);
        clazzs.add(clazz2);
        clazzs.add(clazz3);
        clazzs.add(clazz4);


    }

}

结果演示:
第3组UI(2)-AdapterView之GridView、AutoCompleteTextView、Spinner、Gallery和ExpandableListView_第6张图片

你可能感兴趣的:(android,布局)