GridView及
ExpandableListView、AutoCompleteTextView、ToggleButton
一、GridView:
待补充
二、ExpandableListView:
(一)、类结构:
java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.AdapterView<T extends android.widget.Adapter>
↳ android.widget.AbsListView
↳ android.widget.ListView
↳ android.widget.ExpandableListView
(二)、BaseExpandableListAdapter适配器的类结构:
java.lang.Object
↳ android.widget.BaseExpandableListAdapter
【备注:】ExpandableListView还可以使用SimpleExpandableListAdapter适配器加载。
java.lang.Object
↳ android.widget.BaseExpandableListAdapter
↳ android.widget.SimpleExpandableListAdapter
(三)、UI核心代码:
1、xml布局文件及解释:
<ExpandableListView
android:id="@+id/list_main"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:listSelector="#00000000" >
</ExpandableListView>
<!-- android:cacheColorHint="#00000000" 此属性用来设置:拖动列表的时候防止出现黑色背景 -->
<!-- android:drawSelectOnTop="false" 此属性用来设置listview上的背景颜色会不会 挡住(覆盖)内容 , 如果这是为false就表示不会覆盖掉 -->
(四)、java核心代码:
publicclass MainActivity extends Activity {
private ExpandableListView expandableListView;
// 设置组视图的图片
int[] groupImg = newint[] { R.drawable.wei, R.drawable.shu, R.drawable.wu };
// 设置组视图的显示文字
private String[] groupData = new String[] { "魏", "蜀", "吴" };
// 设置子视图图片
publicint[][] childImg = newint[][] {
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq,
R.drawable.qq, R.drawable.qq },
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq,
R.drawable.qq, R.drawable.qq },
{ R.drawable.qq, R.drawable.qq, R.drawable.qq, R.drawable.qq,
R.drawable.qq } };
// 设置子视图显示文字
private String[][] childData = new String[][] {
{ "夏侯惇", "许褚", "郭嘉", "司马懿", "杨修" },
{ "马超", "张飞", "刘备", "诸葛亮", "赵云" },
{ "吕蒙", "陆逊", "孙权", "周瑜", "孙尚香" } };
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 以下是一个取消title的样式设置
// requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
expandableListView = (ExpandableListView) findViewById(R.id.list_main);
// 给expandableListView设置适配器
expandableListView.setAdapter(new MyAdapter(MainActivity.this));
// 设置item点击的监听器
expandableListView.setOnChildClickListener(new OnChildClickListener() {
@Override
publicboolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// 通过groupPosition和childPosition就能获取到子列表的文字内容
Toast.makeText(MainActivity.this,
"你点击了:" + childData[groupPosition][childPosition],
Toast.LENGTH_SHORT).show();
returnfalse;
}
});
}
// 以下是自定义了一个可扩展ListView的适配器。BaseExpandableListAdapter是一个直接继承于object的对象。
class MyAdapter extends BaseExpandableListAdapter {
private Context context;
// 构造方法,目的是让context对象传进类中,方便调用
public MyAdapter(Context context) {
this.context = context;
}
@Override
// 获取组的个数
publicint getGroupCount() {
returngroupData.length;
}
@Override
// 获取组中每个item的内容
public Object getGroup(int groupPosition) {
returngroupData[groupPosition];
}
@Override
// 获取组中每个item的id
publiclong getGroupId(int groupPosition) {
return groupPosition;
}
@Override
// 获取每组中每个子item的个数
publicint getChildrenCount(int groupPosition) {
returnchildData[groupPosition].length;
}
@Override
// 获取子item的内容
public Object getChild(int groupPosition, int childPosition) {
returnchildData[groupPosition][childPosition];
}
@Override
// 获取子item的id
publiclong getChildId(int groupPosition, int childPosition) {
return childPosition;
}
@Override
publicboolean hasStableIds() {
returntrue;
}
@Override
// 获取组视图。就是生成组中每个item视图
// 通过这个例子希望大家学会在java中定义布局和控件。并且在java文件中去定义布局和控件的属性。
public View getGroupView(int groupPosition, boolean isExpanded,
View convertView, ViewGroup parent) {
// 构造一个线性布局
LinearLayout layout = new LinearLayout(context);
// 让线性布局的方向为水平方向。其实默认情况下就是水平方向。这里是希望同学们学会这个设置方向的方法
layout.setOrientation(0);
// layout.setBackgroundResource(R.drawable.ic_launcher);
// 构造一个ImageView控件
ImageView logo = new ImageView(context);
// 给这个图片控件设置内容
logo.setImageResource(groupImg[groupPosition]);
// 设置图片的内填充。setPadding(50, 0, 0, 0)四个参数的方向分别为左、上、右、下。
logo.setPadding(50, 0, 0, 0);
// 将控件加入到布局中
layout.addView(logo);
// 构造一个文本控件
TextView textView = new TextView(context);
// 设置文本的颜色
textView.setTextColor(Color.BLUE);
// 设置内填充边距
textView.setPadding(36, 0, 0, 0);
// 设置文字大小
textView.setTextSize(20);
// 给文本控件设置内容。就要从给定的数据源中获取数据
textView.setText(getGroup(groupPosition).toString());
// 将文本控件加入到布局中
layout.addView(textView);
return layout;
}
@Override
// 获取子视图。就是生成组中每个子item视图。该方法中的注释同上
public View getChildView(int groupPosition, int childPosition,
boolean isLastChild, View convertView, ViewGroup parent) {
LinearLayout layout = new LinearLayout(context);
layout.setOrientation(0);
ImageView headpicView = new ImageView(context);
headpicView
.setImageResource(childImg[groupPosition][childPosition]);
// 设置图片的内填充。setPadding(100, 0, 0, 0)四个参数的方向分别为左、上、右、下。
headpicView.setPadding(100, 0, 0, 0);
layout.addView(headpicView);
TextView textView = new TextView(context);
textView.setPadding(30, 0, 10, 10);
textView.setTextSize(16);
textView.setText(getChild(groupPosition, childPosition).toString());
layout.addView(textView);
return layout;
}
@Override
publicboolean isChildSelectable(int groupPosition, int childPosition) {
returntrue;
}
};
}
三、AutoCompleteTextView:自动完成文本框
(一)、介绍:
自动完成文本框,用于实现用户输入一定字符后,显示一个下拉式菜单,让用户从中选择,当用户选择后,就会自动填写该文本框。
类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText
↳ android.widget.AutoCompleteTextView
(二)、xml常用属性:
1、android:completionThreshold 用于指定用户至少输入几个字符才会显示提示
UI核心代码:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView_main"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:completionThreshold="1"
android:completionHint="请输入:"
android:ems="10"
android:text="">
<requestFocus/>
</AutoCompleteTextView>
</LinearLayout>
(三)、java核心代码:
publicclass MainActivity extends Activity {
private AutoCompleteTextView autoCompleteTextView_main;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
autoCompleteTextView_main = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView_main);
String[] arrStr = new String[] { "about", "adapter", "apple",
"android", "angle", "angel" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this, android.R.layout.simple_dropdown_item_1line,
arrStr);
autoCompleteTextView_main.setAdapter(adapter);
}
}
四、ToggleButton:开关按钮
(一)、类结构:
java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.Button
↳
android.widget.CompoundButton
↳
android.widget.ToggleButton
(二)、UI核心代码:
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<ToggleButton
android:id="@+id/toggleButton_main_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="开"
android:textOff="关"/>
<ToggleButton
android:id="@+id/toggleButton_main_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textOn="开"
android:textOff="关"/>
</LinearLayout>
(三)、java核心代码:
publicclass MainActivity extends Activity {
private ToggleButton toggleButton_main_one;
private ToggleButton toggleButton_main_two;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggleButton_main_one = (ToggleButton) findViewById(R.id.toggleButton_main_one);
toggleButton_main_two = (ToggleButton) findViewById(R.id.toggleButton_main_two);
OnCheckedChangeListener listener = new OnCheckedChangeListener() {
@Override
publicvoid onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
// TODO Auto-generated method stub
String result1 = toggleButton_main_one.isChecked() ? "开" : "关";
String result2 = toggleButton_main_two.isChecked() ? "开" : "关";
setTitle(result1 + ":" + result2);
}
};
toggleButton_main_one.setOnCheckedChangeListener(listener);
toggleButton_main_two.setOnCheckedChangeListener(listener);
}
}