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

Android学习--Android的常见控件与布局

2012-03-31 10:43 615 查看
1.Button

EditText

Menu(OncreateOptionMenu当客户点击menu时调用、
OnOptionItemSelected 当客户点击menu中的一个item时调用此函数)

2.Activity布局:
(1)(代码提示快捷键 – 使用Alt
+ /键)
(2)LinearLayout线性布局(android:orientation线性布局方向是水平
(vertical)还是垂直(horizontal))、TableLayout表格布局(android:stretchColumns表示当前拉伸的列,使表格填满)
(3)控件的一些属性:
android:id、android:text(控件显示文字,尽量使用string.xml中的字串)、
android:gravity(文字对齐方式,有center_vertical水平居中、top置顶、left靠左等)、
android:textSize(字体大小)、android:background背景色(RGB)、padding(控件中内容的内边距)、paddingLeft(左内边距)、android:singleLine(如果为真,控件内容将显示在一行)、android:layout_weight(控件占整个布局的比例)
(4)LinearLayout与TableLayout的嵌套、LinearLayout与LinearLayout之间的嵌套
(5)RelativeLayout相对布局,比较灵活,相对布局中控件的一些重要属性:
android:layout_above将该控件的底部至于给定ID的控件之上
android:layout_below将该控件的顶部至于给定ID的控件之下
android:layout_toLeftOf将该控件的右边缘和给定ID的控件的左边缘对齐
android:layout_toRightOf将该控件的左边缘和给定ID的控件的右边缘对齐

android:layout_alignBaseline该控件的baseline和给定ID的控件的
baseline对齐
android:layout_alignBottom将该控件的底部边缘与给定ID控件的底部边缘
android:layout_alignLeft将该控件的左边缘与给定ID控件的左边缘对齐
android:layout_alignRight将该控件的右边缘与给定ID控件的右边缘对齐
android:layout_alignTop将给定控件的顶部边缘与给定ID控件的顶部对齐

android:alignParentBottom如果该值为true,则将该控件的底部和父控件的底部对齐
android:layout_alignParentLeft如果该值为true,则将该控件的左边与父控件的左边对齐
android:layout_alignParentRight如果该值为true,则将该控件的右边与父控件的右边对齐
android:layout_alignParentTop如果该值为true,则将空间的顶部与父控件的顶部对齐

android:layout_centerHorizontal如果值为真,该控件将被至于水平方向的中央
android:layout_centerInParent如果值为真,该控件将被至于父控件水平方向和垂直方向的中央
android:layout_centerVertical如果值为真,该控件将被至于垂直方向的中央

android:layout_marginLeft左外边距,即该控件与其左边控件的边距(内边距是控件与其内容之间的距离)

3.单选按钮(RadioButtonRadioGroup)与多选按钮CheckBox的使用:
(1)、RadioButton:单选按钮,一般将其绑定在一个组内,即绑定在RadioGroup上,实现同一个组的单选功能;
RadioGroup:当选按钮组,用于包含多个RadioButton,同一个RadioGroup只允许选中一个RadioButton;
为了对RadioGroup中的不同RadioButon按下作出不同反应,必须位该
RadioGroup绑定一个监听器,采用setOnCheckedChangeListener方法绑定,必须实现的监听器是RadioGroup.OnCheckedChangeListener,可以使用匿名内部类的方式声明该监听器类,必须实现的接口,onCheckedChanged用于监测是那个单选按钮按下;
(2)CheckBox:多选按钮,跟RadioButton不同的是,用户可以同时按下多个
CheckBox,CheckBox不用绑定在一个Group上;
为了对不同的CheckBox按下作出不同的反应,需要位每个CheckBox绑定监听器,采用setOnCheckedChangeListener方法绑定,必须实现的监听器是CompoundButton.OnCheckedChangeListener,也可以使用匿名内部类的方式声明该监听器类,必须实现的接口onCheckedChanged用于监测当前按钮的状态是选中还是未未选中,以作出不同的反应;

4.Toast的基本用法:用来提示用户一些有用的信息
Toast.makeText(RadioTest.this,"famle",Toast.LENGTH_SHORT).show();
makeText第一个参数是当前Activity的对象,第二个参数是要提示的信息,第三个是对
message要显示多长的设置,makeText后之间show进行显示一个小提示框;

5.ProgressBar进度条
android:style为"?android:attr/progressBarStyleHorizontal"时,表示的是水平进度条,默认的"?android:attr/progressBarStyle"为转圈圈的风格;
android:max表示进度条的最大长度(也可以用进度条对象调用setMax)
android:visibility表示进度条的可视状态(gone不可见、visible可见),也可以用进度条的对象调用setVisibility方法设置
setProcess设置步长,setSecondaryProcess设置第二进度条的步长

6.ListView
ArrayList(放置Hashmap对象)、HashMap(放置键值对)Arraylist放置在适配器中)
实现ListView,得设置一个List的适配器,采用方法setListAdapter设置
SimpleAdapter最简单的适配器,注意定义适配器对象时各个参数的含义(参考视频或 google帮助文档)
注意:listview的activity直接继承ListActivity,为相应listviewi中列表项按下,得注意重载方法OnlistItemClicked;主布局文件只需放置一个嵌套在LinearLayout中的
ListView,可以对每个列表项的布局再另写一个布局文件,在设置listView的适配器时,把这个布局文件传入则可;

7.Spinner
创建Spinner的步骤:
(1)在布局文件中声明:
<Spinner

android:id="@+id/spinner_id"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

/>
(2)在string.xml中声明一个数组:
<string-array name="spinner_arr">

<item >Beijing</item>

<item >Shenzhen</item>

<item >Xian</item>

<item >Shanghai</item>

<item >Guangzhou</item>
(3)创建一个ArrayAdapter:
ArrayAdapter<CharSequence> adapter =

ArrayAdapter.createFromResource(this, R.array.spinner_arr, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
android.R.layout.simple_spinner_item

R.layout.simple_spinner_dropdown_item
表示采用一种android默认的标准布局,可替换位自定义的布局
(4)得到Spinner对象,并设置数据
spinner = (Spinner)findViewById(R.id.spinner_id);

spinner.setAdapter(adapter);
spinner.setPrompt("测试");设置弹出的视图的标题
(5)要响应按下spinner中的item,得实现一个OnItemSelectedListener的接口,必须实现函数
//响应item选中
//arg0.getItemAtPosition(arg2);可以获得position位arg2的item的字串

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3)
//相应无item选中

public void onNothingSelected(AdapterView<?> arg0)

注:也可以采用另一种方式创建ArrayAdapter,如下
List<String> list = new ArrayList<String>();

list.add("北京");

list.add("深圳");

list.add("上海");
ArrayAdapter adapter = new ArrayAdapter(this, R.layout.item, R.id.textView, list);
将上述代码替换步骤2的代码亦能实现之
不过使用这种方法必须定义自己的xml布局文件,而且必须有一个TextView

8.DatePickerDialog
创建DatePickerDialog的步骤:
(1)声明一个监听器:
响应DatePickerDialog中的set按钮按下

DatePickerDialog.OnDateSetListener onDateSelected = new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker view, int year, int monthOfYear,

int dayOfMonth) {

// TODO Auto-generated method stub

Toast.makeText(SpinnerActivity.this,"current time is " + year+ "-" + monthOfYear + "-" + dayOfMonth, BIND_AUTO_CREATE).show();

}

};
(2)复写onCreateDialog(int id)方法:
在调用Activity的showDialog方法时会调用此函数
protected Dialog onCreateDialog(int id) {

// TODO Auto-generated method stub

switch (id){

case DATEPICKER://这个id与showDialog时设置并传入的匹配才调用

return new DatePickerDialog(this, onDateSelected, 2012, 4, 1);

}

return null;

}
(3)在需要的时候调用showDialog方法:
showDialog(DATEPICKER);

9.AutoCompleteTextView//在textView中输入文本时自动提示
创建一个AutoCompleteTextView的步骤:
(1)在布局文件中声明一个AutoCompleteTextView

(2)定义提示条目的样式(注意:这里只需一个TextView,别加XXXLayout等的布局方式,否则出错)
<?xml version="1.0" encoding="utf-8"?>

<TextView

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:padding="10dp"

android:textSize="16sp"

android:textColor="#000"

>

</TextView>
(3)创建一个ArrayAdapter,AutoCompleteTextView需要使用ArrayAdapter来提供数据:
List<String> list1 = new ArrayList<String>();

list1.add("123516");

list1.add("3228");

list1.add("12562");

ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this, R.layout.list_item, list1);
注意:这里也可以使用一个String数组来给AutoCompleteTextView提供数据,用这个数组替换list1的位置

(4)为AutoCompleteTextView设置数据:
autoCPTV.setAdapter(adapter1);

10. ExpandableListActivity



我们看到“国家”和“语言”分别是组名,每个组名下面还有很多child(中国,美国),(汉语,英语),其实ExpandableListActivity就是实现这样的功能,能更方便的现实一些列表信息,

创建ExpandableListActivity的步骤:
(1)在布局文件当中声明ExpandableActivity控件(main.xml):
<ExpandableListView android:id="@id/android:list"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:drawSelectorOnTop="false"/>

<TextView android:id="@id/android:empty"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:text="No data"/>
注意:这里使用的是google已经定义好的id

(2)在布局文件中声明group的样式(group.xml):
<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<TextView android:id="@+id/groupTo"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="60px"

android:paddingTop="10px"

android:paddingBottom="10px"

android:textSize="26sp"

android:text="No data" />

</LinearLayout>
(3)在布局文件当中声明子项的样式:
<?xml version="1.0" encoding="UTF-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<TextView android:id="@+id/childTo"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingLeft="50px"

android:paddingTop="5px"

android:paddingBottom="5px"

android:textSize="20sp"

android:text="No data" />

</LinearLayout>

(4)创建一个Activity继承自ExpandableListActivity
(5)为group创建数据:
List<Map<String, String>> groups = new ArrayList<Map<String, String>>();

Map<String, String> group1 = new HashMap<String, String>();

group1.put("group", "国家");

Map<String, String> group2 = new HashMap<String, String>();

group2.put("group", "语言");

groups.add(group1);

groups.add(group2);
(6)位child创建数据:
List<Map<String, String>> child1 = new ArrayList<Map<String, String>>();

Map<String, String> child1Data1 = new HashMap<String, String>();

child1Data1.put("child", "中国");

child1.add(child1Data1);

Map<String,String> child1Data2 = new HashMap<String,String>();

child1Data2.put("child", "美国");

child1.add(child1Data2);
……
List<List<Map<String, String>>> childs = new ArrayList<List<Map<String, String>>>();

childs.add(child1);

childs.add(child2);
(7)利用上面的group及childs定义一个SimpleExpandableListAdapter对象,为该ExpandableListActivity提供数据
SimpleExpandableListAdapter sela = new SimpleExpandableListAdapter(

this, //context

groups,//一级条目数据
R.layout.group,//用来设置一级条目样式的布局文件
new String[] { "group" },//用来设置一级条目数据的key

new int[] { R.id.groupTo }, //指定一级条目数据显示控件的id

childs, //指定二级条目数据

R.layout.child,//用来设置二级条目样式的布局文件

new String[] { "child" }, //指定二级条目数据的key

new int[] { R.id.childTo });//指定二级条目数据显示控件的id
(8)为该ExpandableListActivity设置数据
setListAdapter(sela);

11. SeekBar(可拖动的进度条,比如mp3播放器的进度条,前面学过的ProgressBar是一个不可拖动的)
(1)在布局文件当中声明SeekBar
(2)定义一个实现SeekBarOnSeekBarChangeListener监听器的类,即进度条的监听器

必须实现的接口有
onProgressChanged //进度条拖动过程中调用

onStartTrackingTouch//进度条开始拖动时调用
onStopTrackingTouch//进度条停止拖动时调用
(3)给进度条控件SeekBar的对象绑定监听器

12. RatingBar (评分条,在软件商店里经常用到)
使用RatingBar的步骤:
(1)在布局文件当中声明RatingBar;
<RatingBar

android:id="@+id/ratingBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:numStars="5"

android:stepSize="1.0"

/>

注意在给其设置属性时android:layout_height最好设置为wrap_content
android:numStars="5" 确定了有5个星星
(2)实现监听器接口OnRatingBarChangeListener
必须实现的函数onRatingChanged,在每次选择星星时调用(如果选的还是当前的星星,则不变)

(3)位RatingBar绑定监听器
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener());
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: