您的位置:首页 > 移动开发 > Android开发

Android32_ExpandableListView、AutoCompleteTextView、ToggleButton

2016-01-20 10:18 549 查看
ExpandableListView、AutoCompleteTextView、ToggleButton


一、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核心代码:

public class MainActivity extends Activity {

private ExpandableListView expandableListView;

// 设置组视图的图片

int[] groupImg = new int[] { R.drawable.wei, R.drawable.shu, R.drawable.wu };

// 设置组视图的显示文字

private String[] groupData = new String[] { "魏", "蜀", "吴" };

// 设置子视图图片

public int[][] childImg = new int[][] {

{ 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

protected void 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

public boolean onChildClick(ExpandableListView parent, View v,

int groupPosition, int childPosition, long id) {

// 通过groupPosition和childPosition就能获取到子列表的文字内容

Toast.makeText(MainActivity.this,

"你点击了:" + childData[groupPosition][childPosition],

Toast.LENGTH_SHORT).show();

return false;

}

});

}

// 以下是自定义了一个可扩展ListView的适配器。BaseExpandableListAdapter是一个直接继承于object的对象。

class MyAdapter extends BaseExpandableListAdapter {

private Context context;

// 构造方法,目的是让context对象传进类中,方便调用

public MyAdapter(Context context) {

this.context = context;

}

@Override

// 获取组的个数

public int getGroupCount() {

return groupData.length;

}

@Override

// 获取组中每个item的内容

public Object getGroup(int groupPosition) {

return groupData[groupPosition];

}

@Override

// 获取组中每个item的id

public long getGroupId(int groupPosition) {

return groupPosition;

}

@Override

// 获取每组中每个子item的个数

public int getChildrenCount(int groupPosition) {

return childData[groupPosition].length;

}

@Override

// 获取子item的内容

public Object getChild(int groupPosition, int childPosition) {

return childData[groupPosition][childPosition];

}

@Override

// 获取子item的id

public long getChildId(int groupPosition, int childPosition) {

return childPosition;

}

@Override

public boolean hasStableIds() {

return true;

}

@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

public boolean isChildSelectable(int groupPosition, int childPosition) {

return true;

}

};

}


二、AutoCompleteTextView:自动完成文本框

(一)、介绍:
自动完成文本框,用于实现用户输入一定字符后,显示一个下拉式菜单,让用户从中选择,当用户选择后,就会自动填写该文本框。

类结构:

java.lang.Object
↳ android.view.View
↳ android.widget.TextView
↳ android.widget.EditText
↳ android.widget.AutoCompleteTextView

(二)、xml常用属性:
1、android:completionThreshold 用于指定用户至少输入几个字符才会显示提示

UI核心代码:



<LinearLayout xmlns: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核心代码:



public class MainActivity extends Activity {

private AutoCompleteTextView autoCompleteTextView_main;

@Override

protected void 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核心代码:



<LinearLayout xmlns: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核心代码:



public class MainActivity extends Activity {

private ToggleButton toggleButton_main_one;

private ToggleButton toggleButton_main_two;

@Override

protected void 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

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

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: