【android浅析】android程序界面编程与视图(View)组件

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浅析】android程序界面编程与视图(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)                         设置组件是否可见                                   

ViewGroup类继承了View类,因此也是可以当成一个普通的View类来使用的。但是,ViewGroup类主要是当成容器类来使用。又由于ViewGroup类是一个抽象类,因此在使用中,通常使用它的一些子类来作为容器,例如各种布局管理器。ViewGroup容器控制其子组件的分布依次是Viewgroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类。这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。
Viewgroup.LayoutParams支持两个XML属性:
XML属性 说明
android:layout_height 指定该子组件布局的高度
android:layout_width 指定该子组件布局的宽度
在XML布局文件中这样使用:
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_height、android:layout_width两个属性的值有三种:
(1)、fill_parent:指定子组件的高度、宽度和父容器的高度、宽度相同(实际上还要减去填充的空白距离)。
(2)、match_parent:该属性和fill_parent完全相同,但是在android2.2版本以后推荐使用这个。
(3)、wrap_parent:指定组件的大小恰好能包裹它里面的内容。

另外ViewGroup.MarginLayoutParams支持四个XML属性:

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"/>


接下来我们就需要在Activity中先找到这个布局文件:

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);
	}
});

效果如图:

【android浅析】android程序界面编程与视图(View)组件                    【android浅析】android程序界面编程与视图(View)组件


从上面的代码我们可以看到,javaactivity类中的组件是通过new关键字创建的,然后程序使用LineLayout容器来“存放”这些组件,这样就组成了图形用户。

在很多情况下我们都要传一个参数this,这是为什么呢?这是因为由于创建UI组件时传入了一个Content参数,Content代表访问android应用环境的全局信息的API。让UI组件持有一个Content参数,可以让这些UI组件通过该Content参数获取android应用环境的全局信息。Content本身是一个抽象类,android的应用组件如Activity、server都是继承了Content,因此Activity、Server都可以直接作为Content使用。

除了上面两种实现控制UI组件,我们一般还可以将两种方式结合使用,这样就可以更加灵活的开发了,这个就不说了!大家可以自己动手尝试,创建一个新项目,亲身体会一下!

好了,今天我们要将的就结束了大家感觉是不是很简单,看再多的次数,不如亲手敲一下代码,=这样才能发现更多的问题,才能思考的更深。下次我们将继续介绍新的知识-android四大基本布局+新增布局,欢迎大家继续关注,我们一起交流、一起进步……









 

【android浅析】android程序界面编程与视图(View)组件

上一篇:android 中导出数据


下一篇:C++ 将文件读到 string 的一种简单实现 - rdbuf()