12、GridView及 ExpandableListView、AutoCompleteTextView、ToggleButton

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);


}


}
















  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值