一、布局文件实现步骤:
1、在res/layout目录下创建一个demo_layout.xml布局文件,
2、使用RelativeLayout嵌套一个LinearLayout来进行布局,往里添加一个TextView和两个Button,并设置属性。
3、创建一个FirstLayoutActivity类,在onCreateView()方法中,使用findViewById()实例化组件。
4.Activity跳转:
1.1创建一个Activity,并且注册
1.2通过intent指定从哪个Activity跳转到新的Activity
1.3再通过Activity的startActivity(Intent intent)方法来启动
5.按钮点击监听
1.1在布局文件中,部署一个按钮(Button)。
1.2为按钮添加一个ID,用来在Activity中通过findViewById()来寻找到按钮的实例。
1.3创建一个点击监听View.OnClickListener()
1.4调用按钮的setOnClickListener()方法来为按钮设置一个监听器
二、布局类型:
1.AbsoluteLayout,绝对布局,使用坐标系规范屏幕,原点在左上角,x向右是正方向,y向下是正方向。
1.1关键属性:
layout_x,layout_y,在AbsoluteLayout中放置控件时,这两个属性是AbsoluteLayout特有的,只能在AbsoluteLayout中的控件才能使用。他们用来确定指定的控件的摆放坐标(控件左上角的坐标)。
1.2优缺点:
优点:使用AbsoluteLayout,能够最自由地去摆放我们界面上的控件。
缺点:由于AbsoluteLayout是使用坐标系的方式来确定子控件的摆放位置,但是由于Android平台屏幕的碎片化,不能确定用户的屏幕分辨率,那么贸然使用这种布局类型,可能让用户感受不一样,影响用户体验。
2.LinearLayout,线性布局,所有的子控件都排成一列整齐摆放。
2.1关键属性:
LinearLayout属性:
android:orientation="vertical"["horizontal"]
表示LinearLayout中的子控件的摆放方向,vertical垂直摆放(从上到下)。horizontal水平摆放(从左到右)。
android:baselineAligned="true"["false"]
表示LinearLayout中的子控件的摆放要依据基线来对齐。
true是对齐,false不对齐。
android:baselineAlignedChildIndex="childIndex"
表示以哪一个子控件的基线来对齐。
android:gravity="center_horizontal"
表示子控件对齐的方向,可以向左,右,上,下,居中...
子控件属性:
android:layout_weight="1.0"
这个属性只有在LinearLayout中有效,他表示子控件所需要占据的大小,用于与其他的控件分割父控件的空间。
2.2优缺点:
优点:线性布局,受到屏幕分辨率影响最小。子控件排列整齐。
缺点:子控件只能按照指定的几种方式摆放,可能无法适应商业项目中部分花样繁多的功能界面的需求。
3.FrameLayout,帧布局,放置在内部的所有控件都会分层摆放,一个控件一层。后放入的控件会摆放在最上面的层里。如果最上面的一层的控件不够大,也能够看到他下面的其他控件。
3.1关键属性:
FrameLayout属性:
android:foreground,可以使用这个属性在整个布局的前面添加一个图片或者颜色。
android:foregroundGravity,调整由android:foreground设置的图片的对齐方向。
3.2优缺点
优点:有多重动画控件都由FrameLayout实现,说明FrameLayout很适合播放动画的功能界面实现。
缺点:约束比较强,控件摆放的方式只有这一种,对内部控件操作的手段也比较少。
4.RelativeLayout,相对布局,通过父控件的边或者以前设置的控件的位置,来确定现在放入的新的控件的位置
4.1子控件的属性:
android:layout_alignParentTop
android:layout_alignParentBottom
android:layout_alignParentLeft
android:layout_alignParentRight,贴到指定的父控件的边缘。
android:layout_toLeftOf
android:layout_toRightOf
android:layout_toStartOf
android:layout_toEndOf,放置在指定id的控件的指定方向上。
android:layout_above
android:layout_below,放置在指定id的控件的上或下。
android:layout_alignLeft
android:layout_alignRight
android:layout_alignTop
android:layout_alignBottom,与指定id的控件边缘对齐。
android:layout_centerInParent,将我们的控件放置在父控件的中间。
4.2优缺点
优点:内部子控件都是自己相对摆放,在屏幕分辨率出现巨大变化的时候,他们之间的相对位置都不会变。这个布局类型可以很大的减少我们屏幕出现变化时,界面效果的差异性。
缺点:当我们的控件之间的相对关系建立之后,不容易再做修改。
5.Tablelayout,表格布局,不过必须配合TableRow使用,否则就是一个垂直排列的线性布局。
5.1关键属性:
TableLayout:
android:stretchColumns="0"拉伸列,列号从0开始。
android:collapseColumns="0"隐藏列,同上。
android:shrinkColumns="0"收缩列,同上。
TableRow:
android:weightSum="5",此属性与控件的 android:layout_weight="1"一起使用,用来设置一行的所有控件的大小。(只有新版本可以使用,在4.0版本后可以使用)
6.GridLayout,网格布局,不需要TableRow这么麻烦
6.1关键方法
android:columnCount="3"
android:rowCount="5"
可以通过上面两个方法方便设置我们网格布局的行数和列数。
子控件也可以使用android:layout_column="1"来设置子控件想排在第几个。
三、常用控件:
1. Button ,按钮
常用Button有3中:
1.1当你只需要在按钮上放置文字信息时,可以使用Button。
1.2当你只需要在按钮上放置图片时,可以使用ImageButton。
1.3当你需要在按钮上同时放置文字和图片时,可以使用Button。
只有文字信息的按钮:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
... />
只含有图片的按钮:
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/button_icon"
... />
同时含有文字和图片的按钮:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button_text"
android:drawableLeft="@drawable/button_icon"
... />
1.4常用属性:
1.使用android:onClick属性,方便地响应按钮的单击事件。
1.1.在XML文件中的Button标签中加入android:onClick属性。
1.2.在加载这个XML文件的Activity中加入一个固定格式的方法:
public void 响应方法名(View view){}
1.3.将响应方法的名字填入android:onClick的值中。
使用android:backgroud来设置一个新的外观。
新的外观图片制作一个selector:
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:state_pressed="true" android:drawable="@drawable/pic1"></item>
<item android:state_pressed="false" android:drawable="@drawable/pic2"></item>
</selector>
1.5 onClickListener
1,5.1 获取Button对象。
1.5.2. 创建View.OnClickListener的对象。
1.5.3. 然后将View.OnClickListener的对象交给Button对象。
2. EditText:可输入文本框,这个控件可以让用户输入文本信息。
<EditText
android:id="@+id/email_address"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
2.1属性:
android:hint="@string/email_hint"属性:编辑框加入一个提示信息。
android:inputType="textEmailAddress" 调整软键盘样式,得到只有数字或者方便输入邮箱地址的软键盘。
android:imeOptions="actionSend"自定义软键盘中确认按钮。
android:password="true"以密文形式输入信息。改回false之后,以明文形式输入。
我们加入了IMEOptions属性后,我们需要一个监听器来监听这个按钮的响应:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
handled = true;
}
return handled;
}
});
除EditText外,我们还有AutoCompleteTextView作为文字信息输入的控件
3. TextView,文本框。
3.1常用属性:
android:text 文本信息
android:textSize 字体大小(单位sp)
android:textColor 字体颜色
android:autoLink 能使文字中的电话号码,网址,邮箱变成类似于超链接的样子。
android:lines 行数
android:maxLength 最大字数
4. CheckBox,多选框。
4.1可以使用设置onClick的方式加入一个写在Activity中的点击响应
方法。
4.2我们可以使用多选框的监听器:OnCheckedChangeListener
4.3自定义样式:
在android:button属性上设置Selector。
5. RadioButton,单选框。
这个控件不能单独使用,需要与RadioGroup一起使用。给RadioGroup加入一个OnCheckedChangeListener来监听我们的选择监听。
一定要注意这个监听器和多选框的可不是一个,注意他们的包名!
6.DatePicker,TimePicker 日期和时间
在布局文件中定义DatePicker和TimePicker,然后通过Canlendar类获得系统时间,通过init方法将日期传给DatePicker,
并设置OnDateChangedListener来监听日期改变,当时间被改变时需要设置setOnTimeChangedListener监听来设置时间。
<DatePicker
android:id= "@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TimePicker
android:id= "@+id/timerPicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
7. ListView,列表控件,实现一个数据列表,方便修改数据,同时影响界面。
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/Cities" >
</ListView>
7.1 常用属性
android:divider="@color/mycolor" 间隔线的图片或者颜色
android:dividerHeight="3dip"间隔线的宽度用于修改ListView中每个item之间的间隔线。
android:stackFromBottom="true"从列表最下方开始。
android:transcriptMode="alwaysScroll"一直显示新来的数据。
android:cacheColorHint="@android:color/transparent" 滑动时,背景透明。
7.2 使用适配器的方式显示ListView:
1.在布局文件中,定义一个简单的ListView标签。
2.在Activity中实现一个我们自己扩展的BaseAdapter子类对象。
3.通过findViewById在Activity中找到布局文件中的ListView对象。
4.将适配器对象设置给我们的ListView对象。
ListView,只能通过适配器,加载他的子控件。
7.3 ListView动态内容的动态添加
1.由用户或服务器获取的数据,更新我们的数据容器。
2.然后调用Adapter.notifyDataSetChanged();来提醒ListView数据已经更新,
界面需要刷新。
7.4 ListView性能优化:
1.复用convertView
在getView的参数列表中,提供给我们了一个convertView,这个视图对象提供了一种性能优化的手段:复用刚推出屏幕范围的那个convertView。
2.减少findViewById的使用次数
在convertView中有一个Object类型的tag属性,可在这个属性上存储一个对象。利用这个对象存一个定义的内部类对象,这个对象保存
convertView的子控件对象。这样复用convertView的时候也就可以复用以前取出的子控件对象了。
8.AdapterView
Adapter是适配器,适配器是用来连接两个不相干的事物的桥梁。同时,适配器是用来连接我们的AdapterView和数据。
AdapterView中我们常用的有:ListView(列表控件),GridView(网格控件),
Gallery(画廊)。