GriedView用于在界面上按照行、列分布的方式来显示多个组件。GriedView和ListView有共同的父类:AbsListView,因此它们有很多相似之处,都是列表项,但唯一的区别是:
GriedView时可以显示多列,ListView只显示一列。所以这样说,ListView是一种特殊的GriedView。
其他相似之处:体现在都需要adapter来传数据,点击事件相同。
特殊:
numColums=”” //表示几列,默认1列
stretchMode=”” //设置拉伸模式
获得LayoutInflater的几种方式:
1)LayoutInflater flater = getLayoutInflater();//最常用
2)LayoutInflater flater = LayoutInflater.from(this);
3)LayoutInflater flater = getSystemService(*);//不常用
在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);
}
AutoCompleteTextView是从EditText派生出的,实际上它是编辑框,但多的功能是:可以自动会显示一个下拉菜单,供用户从中选择。
completionThreshold=”” //设置用户至少输入几个字符才会显示提示
范例:
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);
}
}
Spinner是一个列表选择框,它和Gallery都继承了AbsSpinner,所以只要为其提供Adapter即可。
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);
}
}
与listview的区别,在于listview时上下滑动,gallery是左右滑动。
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" />
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
}
});
ExpandableListView是ListView的子类(ListView属于ViewGroup支下)。它在ListView基础上进行了扩展,把列表项分为几组,每组又可包含多个列表项。
但ExpandableListView的实现需要由ExpandableListAdapter来提供列表项,ExpandableListAdapter是接口。(BaseExpandableListAdapter实现了它,所以只要自定义的适配器来继承BaseExpandableListAdapter即可。)
childDivider=”” //指定各组内各子列表项之间的分隔条
childIndicator=”” //显示在子列表旁边的Drawable对象
groupIndicator=”” //显示在组列表旁边的Drawable对象
groupIndicator=”@null” //去掉小三角号
getGroupCount();返回包含的组列表项的数目。
getGroupView();返回的View对象将作为组列表项。
getChildrenCount();返回特定组所包含的子列表项的数量
getChildView();返回的View对象将作为特定组、特定位置的子列表项。
要求:建立一个组列表是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);
}
}