GridView及 ExpandableListView、AutoCompleteTextView、ToggleButton

本文详细介绍了Android开发中常用的UI控件,包括GridView、ExpandableListView、AutoCompleteTextView和ToggleButton的功能、类结构、XML属性及Java核心代码实现,是Android开发者必备的参考资料。
一、GridView:

(一)、GridView常用属性设置:

<GridView

        android:id="@+id/gridView_main"

        android:layout_width="match_parent"

        android:layout_height="match_parent"

        android:gravity="center" 

        android:padding="5dp" 

        android:horizontalSpacing="5dp"

        android:verticalSpacing="5dp"

        android:numColumns="auto_fit"

        android:stretchMode="columnWidth"

        android:columnWidth="80dp"  />

 

(二)、Item的布局设置:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView_item_icon"
        android:layout_width="60dp"
        android:layout_height="60dp" 

        android:scaleType="centerCrop"
        android:src="@drawable/ic_launcher"/>

    <TextView
        android:id="@+id/textView_item_appname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:lines="2"
        android:textSize="14sp" 
        android:gravity="center"
        android:text="应用程序名称"/>

</LinearLayout>

 

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

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值