android应用开发一个主要内容就是界面开发。随着移动设备的不断普及,android应用几乎无处不在,设计到各个领域。对于用户来说,除了看重一个应用的功能外,图形界面也是最关注的对象。如果一个应用没有提供友好的图形界面,那么将很难吸引最终的用户;相反,如果为应用程序提供一个友好的图形界面(GUI),那么用户可以轻松的通过手指去点击各种事件爱你,来操作这个应用程序,用户就会感觉到”很爽“。就像windows系统一样,最初能很快吸引大量用户,就是因为它有丰富的图形界面,才几乎独占整个市场。可想而知,友好的图形界面是多么的重要。
对于程序员来说,除了要开发出友好的图形界面,还好去思考用什么方式去实现比较好。android提供了大量功能丰富的UI组件,这些组件功能都具有一定的规律且具有很多相似之处,程序开发人员只需要掌握这些规律,就可以实现出漂亮、友好的图形界面了。在接下的一段时间里,将会陆续介绍。今天我们就先介绍一下界面编程与视图组件之间的联系吧!
1、视图组件与容器组件
在一个activity文件中,我们会看到很多包:
import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.RelativeLayout; import android.widget.SeekBar; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.TextView; import android.widget.Toast; import android.widget.ViewSwitcher;
android应用的绝大多数UI组件都是放在android.widget包中以及其子包中、android.view包中以及其子包中。值得注意的是,android中所有的组件都是继承了View类。View类是一个非常重要的类,其还有一个子类ViewGroup,但是ViewGoup类经常作为其他组件的容器使用。
还有一点值得说明的就是View与ViewGoup类之间的关系,View类包含ViewGoup类,同时ViewGoup类中也包含View类:
那么在android项目中我们如何去实现界面开发呢?一般情况下,我们可以采用两种方式来实现:
(1)、在XML布局文件中通过XML属性进行控制,一般推荐使用这种方式。
(2)、在Java程序代码中通过调用方法进行控制。
无论是哪一种实现方式,其实他们的本质都是一样的。在XML文件中实现UI组件,我们要是添加UI组件相应的XML属性;在java代码中实现UI组件,我们通过相应的属性方式来控制组件的属性,也就是说,其实每一个UI组件的XML属性都会对应一个方法。UI组件的属性包括View类常用的XML属性及相关方法和ViewGoup类中常用的XML方法。
对View类来说,他们是所有UI组件的基类,因此它包含的XML属性都会对应一个方法。常用的有:
XML属性 | 相关方法 | 说明 |
---|---|---|
android:alpha | setAlpha(float) | 设置组件的透明度 |
android:background | setBackGroundResource(int) | 设置组建的背景颜色 |
android:id | setId(int) | 设置组件的唯一标识 |
android:keepScreenOn | setKeepSCreenOn(int) | 设置该组件是否强制手机屏幕一直打开 |
android:visibility | setVilibility(int) | 设置组件是否可见 |
XML属性 | 说明 |
android:layout_height | 指定该子组件布局的高度 |
android:layout_width | 指定该子组件布局的宽度 |
android:layout_width="fill_parent" android:layout_height="wrap_content"android:layout_height、android:layout_width两个属性的值有三种:
XML属性 | 相关方法 | 说明 |
---|---|---|
android:layout_marginBottom | setMargins(int,int,int,int) | 指定子组件下边的页边距 |
android:layout_marginLeft | setMargins(int,int,int,int) | 指定子组件左边的页边距 |
android:layout_marginRight | setMargins(int,int,int,int) | 指定子组件右边的页边距 |
android:layout_marginTop | setMargins(int,int,int,int) | 指定子组件上边的页边距 |
在XML布局文件中这样使用:
android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginBottom="10dp"
当然了组件的属性远不止这些,还有很多,以上列举的只是常用的几个而已!
2、使用XML布局文件来控制UI界面
android中常用和推荐使用的就是这种实现方式,它具有简单、方便、清晰的特点,而且可以将应用的视图控制逻辑从java代码中分离出来,放入到XML文件进行控制,很好的提现了MVC原则。在之前我们也说了在XML文件实现组件的方法,,下面再简单介绍一下:
(1)在XML文件中设置布局组件:
例如我实现一个TextView控件:
<TextView android:id="@+id/show_helloworld" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="我是XML布局文件实现的" android:textColor="@color/LightOrange"/>
setContentView(R.layout.main);接下来就是去访问这个组件,需要绑定她的ID,这样才知道要访问的组件是哪一个:
private TextView showText;
showText = (TextView) findViewById(R.id.show_helloworld);一旦获取指定的UI组件之后,就可以通过代码控制这个组件的属性以及UI组件绑定的监听事件。
(2)在代码中控制UI界面
虽然android中推荐使用XML文件来控制组件,如果开发者需要也可以在java代码 中去实现控制一个组件,可以完全抛弃XML文件的限制。
下面我们就接上上面的实现,假设上面的主界面是通过XML文件来实现的,下面我们通过点击Text控件,来调到另一个Activity页面,这个Activity页面是通过java代码来实现的。
新建一个JavaActivity类,添加代码:
//创建一个线性布局管理器 LinearLayout layout = new LinearLayout(this); //设置anctivity显示layout super.setContentView(layout); layout.setOrientation(LinearLayout.VERTICAL); //创建一个TextView final TextView textView = new TextView(this); textView.setText("我是通过java代码实现的……"); layout.addView(textView);
在MainActivity类中调用:
showText = (Button) findViewById(R.id.show_helloworld);
showText.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
Intent intent = new Intent(MainActivity.this,JavaActivity.class);
startActivity(intent);
}
});
效果如图:
从上面的代码我们可以看到,javaactivity类中的组件是通过new关键字创建的,然后程序使用LineLayout容器来“存放”这些组件,这样就组成了图形用户。
在很多情况下我们都要传一个参数this,这是为什么呢?这是因为由于创建UI组件时传入了一个Content参数,Content代表访问android应用环境的全局信息的API。让UI组件持有一个Content参数,可以让这些UI组件通过该Content参数获取android应用环境的全局信息。Content本身是一个抽象类,android的应用组件如Activity、server都是继承了Content,因此Activity、Server都可以直接作为Content使用。
除了上面两种实现控制UI组件,我们一般还可以将两种方式结合使用,这样就可以更加灵活的开发了,这个就不说了!大家可以自己动手尝试,创建一个新项目,亲身体会一下!
好了,今天我们要将的就结束了大家感觉是不是很简单,看再多的次数,不如亲手敲一下代码,=这样才能发现更多的问题,才能思考的更深。下次我们将继续介绍新的知识-android四大基本布局+新增布局,欢迎大家继续关注,我们一起交流、一起进步……