第3章让你的程序变成美女
对于Android应用开发最基本的就是用户界面(GUI,GraphicsUserInterface)的开发。如果一个应用没有好的界面,那么将很难吸引最终用户。所以用户界面的开发对于Android应用开发是很重要的,也是我们首先要掌握的。
Android系统中提供了大量的UI组件,这些组件小到简单的文本框TextView,大到浏览器核心控件WebView,都可以给用户提供不同的功能感受。我们开发者只要根据用户的需求将这些UI组件组合在一起,就像拼装一辆汽车。尽量在有限的手机屏幕中给用户带来无限的美感体验,那么何愁你的应用没有人用呢?
本章主要通过各种应用界面的实例介绍,来带领大家一起学习Android的界面开发。希望大家阅读完本章内容后,可以根据自己的需求独立完成各种界面的开发。
3.1Android中基本控件的使用
范例001更改文字标签的内容
1.实例简介
在上一章中我们搭建完成Android的开发环境,新建立了一个Android工程,在AVD中运行可以看到在一个界面中显示Helloworld的文字标签。这是我们的第一个Android程序,但是这个程序过于死板,如何让文字标签显示我们想让它显示的文字内容呢?这个实例会带领我们通过两种方式修改文字标签的文字内容,方式1:通过控件的xml布局中的text属性修改TextView的文字,方式2:通过在Java代码中得到TextView对象,然后通过对象的setText方法来设置TextView的文字。
2.运行效果
该实例运行效果如图3.1所示。
3.实例程序讲解
方式1:通过修改xml布局文件中TextView
控件的text属性来完成如上效果,主要修改的地
方在我们建立的工程下的res/layout/activity_main.xml。代码如下。
图3.1在界面中显示IamaAndroidDeveloper
01 02xmlns:tools="http://schemas.android.com/tools"
03android:layout_width="match_parent"
04android:layout_height="match_parent"
05android:paddingBottom="@dimen/activity_vertical_margin"
06android:paddingLeft="@dimen/activity_horizontal_margin"
07android:paddingRight="@dimen/activity_horizontal_margin"
08android:paddingTop="@dimen/activity_vertical_margin"
09tools:context=".MainActivity">
10
11 12android:layout_width="wrap_content"
13android:layout_height="wrap_content"
14android:text="IamaAndroidDeveloper"/>
15
16
这是我们的Activity的布局文件,其中第11~14行构造了一个TextView控件,在TextView控件中text属性就代表这个文本标签上显示的文字,所以只要修改text节点的值为你想输入的字符串即可,如第14行的修改。
方式2:在Java代码中得到TextView对象,然后通过对象的setText方法来设置TextView的文字。要通过这种方式修改TextView的内容,步骤如下。
(1)在xml布局文件的TextView控件中加上id字段。
01 android"
02xmlns:tools="http://schemas.android.com/tools"
03android:layout_width="match_parent"
04android:layout_height="match_parent"
05android:paddingBottom="@dimen/activity_vertical_margin"
06android:paddingLeft="@dimen/activity_horizontal_margin"
07android:paddingRight="@dimen/activity_horizontal_margin"
08android:paddingTop="@dimen/activity_vertical_margin"
09tools:context=".MainActivity">
10
11 12android:id="@+id/Tv"
13android:layout_width="wrap_content"
14android:layout_height="wrap_content"
15android:text="@string/hello_world"/>
16
17
如上面中代码的第12行,通过id节点给TextView对象加上唯一标示的id。这里需要注意的是id的值是自定义id,所以加入的方式为@+id/Tv。其中的Tv是我们的TextView的id。
(2)在代码中获得此TextView对象,通过setText方法修改此TextView的值。
主要修改的地方在我们建立的工程下的src/com.wyl.example/MainActivity.java,代码如下。
01packagecom.wyl.example;//当前包名
02//导入必备的包
03importandroid.os.Bundle;
04importandroid.app.Activity;
05importandroid.view.Menu;
06importandroid.widget.TextView;
07
08publicclassMainActivityextendsActivity{//定义MainActivity继承自Activity
09
10privateTextViewTv;//定义TextView的对象
11
12@Override
13protectedvoidonCreate(BundlesavedInstanceState){
14super.onCreate(savedInstanceState);//调用父类的onCreate方法
15setContentView(R.layout.activity_main);//通过setContentView方法设置当前页面的布局文件为activity_main
16Tv=(TextView)findViewById(R.id.Tv);//通过findViewById得到对应的TextView对象
17Tv.setText("IamaAndroidDeveloper");//通过TextView对象的setText设置文本标签的内容
18}
19@Override
20publicbooleanonCreateOptionsMenu(Menumenu){//当前Activity的菜单创建,本例没有用途
21//Inflatethemenu;thisaddsitemstotheactionbarifitispresent.
22getMenuInflater().inflate(R.menu.main,menu);
23returntrue;
24}
25}
如上代码第10行定义了一个TextView对象,在第16行我们通过findViewById拿到了刚才定义了那个TextView的对象,在第17行通过TextView中的setText方法来修改TextView的值。
通过上面两种方法我们都可以达到修改文本标签内容的目的,相对来说第一种方法,是在程序加载的时候就确定了TextView的内容。第二种方法是在程序运行的时候确定了TextView的内容,所以如果你的文本标签的内容要根据程序运行过程中某些状态来变化的话,要选择第二种方法。例如,用户名标签,一般使用第一种方式,因为它一旦确定基本不再修改;如果是显示网络数据的文本标签,那么就要采用第二种方法了,这样才能根据程序的运行状态修改标签的内容。
4.实例扩展
扩展1:在xml布局文件中android:text的内容可以是字符串,也可以是系统的资源Id。
01 02android:id="@+id/Tv"
03android:layout_width="wrap_content"
04android:layout_height="wrap_content"
05android:text="@string/str"/>
如上面代码的第5行,其中@string/str就代表工程的str字符串资源,工程的字符串资源一般保存在res/values/strings.xml中。
01
02
03
04Example01_01
05Settings
06Helloworld!
07hiAndroid
08
09
在strings.xml文件中的第7行,你可以看到str资源的值是hiAndroid,这就是你设置给TextView的真实内容了。
扩展2:在Java代码中修改TextView的值的话,setText方法有多种重载形式:
publicfinalvoidsetText(CharSequencetext)//设置文本标签内容值为text变量的值
publicfinalvoidsetText(intresid)//设置文本标签内容值为资源resid的值
publicvoidsetText(CharSequencetext,TextView.BufferTypetype)//设置内容值为Text的值type代表缓冲类型
publicfinalvoidsetText(intresid,TextView.BufferTypetype)//设置内容值资源resid的值type代表缓冲类型
publicfinalvoidsetText(char[]text,intstart,intlen)//设置内容为text数组的从第start位开始的后len个字符
范例002更改手机页面的背景色
1.实例简介
到目前为止,我们现在看到的页面的颜色都是系统默认的颜色值,如果我们想要在程序的执行过程中显示与众不同的页面,更改页面的背景颜色是最基本的思路。本实例就带领大家一起来学习如何更改页面的背景颜色。
2.运行效果
该实例运行效果如图3.2所示。
3.实例程序讲解
想要实现更改页面的背景,只需修改res/layout/activity_main.xml即可。代码如下:
01 02xmlns:tools="http://schemas.android.com/tools"
03android:layout_width="match_parent"
04android:layout_height="match_parent"
05android:paddingBottom="@dimen/activity_vertical_margin"
06android:paddingLeft="@dimen/activity_horizontal_margin"
07android:paddingRight="@dimen/activity_horizontal_margin"
08android:paddingTop="@dimen/activity_vertical_margin"
09android:background="@android:color/background_dark"
10tools:context=".MainActivity">
11
12 13android:layout_width="wrap_content"
14android:layout_height="wrap_content"
15android:textColor="@android:color/white"
16android:text="@string/hello_world"/>
17
18
这是我们的Activity的布局文件,其中第一个节点RelativeLayout代表当前页面布局效图3.2更改界面的背景为黑色,字体颜色为白色果为相对布局。第9行添加了android:background节点,并且其值设置成了@android:color/background_dark,其代表Android系统中的颜色资源background_dark。当然这里的值也可以是一个颜色值,如下:
android:background="#FF0000"
其中,#FF0000代表红色的颜色值,这样页面背景就被更改为红色。最优的一种方式是在工程中自定义颜色资源文件,将各种颜色值加入。在res/ralues/目录中建立colors.xml资源文件,内容为:
#FF0000
#00FF00
#0000FF
这样在布局文件中就可以通过如下代码来设置自定义的颜色资源了。
android:background="@color/green"
4.实例扩展
扩展1:在Android中设置任何一种控件的背景方式都一样,可以在对应的xml布局文件中设置也可以在Java代码中设置。在Java代码中设置控件背景的步骤如下:
(1)得到需要修改背景颜色的控件,通过findViewById方法。
(2)通过setBackgroundColor方法设置控件的背景颜色。
扩展2:对于Android中控件的背景的修改,不仅仅可以设置成单一颜色值,而且还可以将一张图片设置成控件的背景。实现方法与设置背景颜色相同。就是在对应的xml布局文件中给相应的控件加上如下代码:
android:background="@drawable/ic_launcher"
其中@drawable/ic_launcher代表工程目录中res/drawable/的ic_launcher.png图片。这样你的页面就以此图片为背景了。
……