设为首页收藏本站

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 215|回复: 1

android程序界面编程与视图(View)组件

[复制链接]
发表于 2014-1-22 15:39:37 | 显示全部楼层 |阅读模式
android应用开发一个主要内容就是界面开发。随着移动设备的不断普及,android应用几乎无处不在,设计到各个领域。对于用户来说,除了看重一个应用的功能外,图形界面也是最关注的对象。如果一个应用没有提供友好的图形界面,那么将很难吸引最终的用户;相反,如果为应用程序提供一个友好的图形界面(GUI),那么用户可以轻松的通过手指去点击各种事件爱你,来操作这个应用程序,用户就会感觉到”很爽“。就像windows系统一样,最初能很快吸引大量用户,就是因为它有丰富的图形界面,才几乎独占整个市场。可想而知,友好的图形界面是多么的重要。
对于程序员来说,除了要开发出友好的图形界面,还好去思考用什么方式去实现比较好。android提供了大量功能丰富的UI组件,这些组件功能都具有一定的规律且具有很多相似之处,程序开发人员只需要掌握这些规律,就可以实现出漂亮、友好的图形界面了。在接下的一段时间里,将会陆续介绍。今天我们就先介绍一下界面编程与视图组件之间的联系吧!
1、视图组件与容器组件
在一个activity文件中,我们会看到很多包:
[java] view plaincopy

  • 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)                        设置组件是否可见                                   

ViewGroup类继承了View类,因此也是可以当成一个普通的View类来使用的。但是,ViewGroup类主要是当成容器类来使用。又由于ViewGroup类是一个抽象类,因此在使用中,通常使用它的一些子类来作为容器,例如各种布局管理器。ViewGroup容器控制其子组件的分布依次是Viewgroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类。这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。

Viewgroup.LayoutParams支持两个XML属性:

XML属性
说明
android:layout_height指定该子组件布局的高度
android:layout_width指定该子组件布局的宽度
在XML布局文件中这样使用:

[html] view plaincopy

  • 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_marginBottomsetMargins(int,int,int,int)指定子组件下边的页边距
android:layout_marginLeftsetMargins(int,int,int,int)指定子组件左边的页边距
android:layout_marginRightsetMargins(int,int,int,int)指定子组件右边的页边距
android:layout_marginTopsetMargins(int,int,int,int)指定子组件上边的页边距
在XML布局文件中这样使用:
[html] view plaincopy

  • android:layout_marginTop="10dp"   
  • android:layout_marginLeft="10dp"  
  • android:layout_marginRight="10dp"  
  • android:layout_marginBottom="10dp"  

当然了组件的属性远不止这些,还有很多,以上列举的只是常用的几个而已!


来自圈子: Demo俱乐部
 楼主| 发表于 2014-1-22 15:40:03 | 显示全部楼层
2、使用XML布局文件来控制UI界面
android中常用和推荐使用的就是这种实现方式,它具有简单、方便、清晰的特点,而且可以将应用的视图控制逻辑从java代码中分离出来,放入到XML文件进行控制,很好的提现了MVC原则。在之前我们也说了在XML文件实现组件的方法,,下面再简单介绍一下:
(1)在XML文件中设置布局组件:
例如我实现一个TextView控件:
[html] view plaincopy

  • <TextView  
  •         android:id="@+id/show_helloworld"  
  •         android:layout_width="wrap_content"  
  •         android:layout_height="wrap_content"  
  •         android:text="我是XML布局文件实现的"   
  •         android:textColor="@color/LightOrange"/>  


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

  • setContentView(R.layout.main);  

接下来就是去访问这个组件,需要绑定她的ID,这样才知道要访问的组件是哪一个:[java] view plaincopy

  • private TextView showText;  

[java] view plaincopy

  • showText = (TextView) findViewById(R.id.show_helloworld);  

一旦获取指定的UI组件之后,就可以通过代码控制这个组件的属性以及UI组件绑定的监听事件。
(2)在代码中控制UI界面
虽然android中推荐使用XML文件来控制组件,如果开发者需要也可以在java代码 中去实现控制一个组件,可以完全抛弃XML文件的限制。
下面我们就接上上面的实现,假设上面的主界面是通过XML文件来实现的,下面我们通过点击Text控件,来调到另一个Activity页面,这个Activity页面是通过java代码来实现的。
新建一个JavaActivity类,添加代码:
[java] view plaincopy

  • //创建一个线性布局管理器  
  • 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类中调用:
[java] view plaincopy

  • 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);  
  • <span style="white-space:pre">  </span>}  
  • });  


效果如图:
                    

从上面的代码我们可以看到,javaactivity类中的组件是通过new关键字创建的,然后程序使用LineLayout容器来“存放”这些组件,这样就组成了图形用户。
在很多情况下我们都要传一个参数this,这是为什么呢?这是因为由于创建UI组件时传入了一个Content参数,Content代表访问android应用环境的全局信息的API。让UI组件持有一个Content参数,可以让这些UI组件通过该Content参数获取android应用环境的全局信息。Content本身是一个抽象类,android的应用组件如Activity、server都是继承了Content,因此Activity、Server都可以直接作为Content使用。
除了上面两种实现控制UI组件,我们一般还可以将两种方式结合使用,这样就可以更加灵活的开发了,这个就不说了!大家可以自己动手尝试,创建一个新项目,亲身体会一下!

CSDN
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|BC Morning Website ( Best Deal Inc. 001 )  

GMT-8, 2025-12-12 18:55 , Processed in 0.014639 second(s), 16 queries .

Supported by Best Deal Online X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表