android UI编程

android studio

UI编程

XML与UI界面

Android中有两种方式可以用来控制界面的视图,一是java代码,二是XML文件来定义界面的内容和属性。官方推荐XML文件来控制界面布局。
每个Activity中有如下代码:
setContentView(R.layout.avtivity_main);
这行代码即为当前Activity加载对应布局文件。R是自动生成的一个常量类,通过它在java代码中访问到指定的布局。如果需要在java代码访问某个具体的控件(比如文本框等),仿照下面这行代码的形式:
Button button = (Button)findViewById(R.id.控件的ID值)
这行代码写在某个Activity中,完成一个按钮的实例化操作,诞生一个名为button的Button对象。控件的ID值指代的就是xml中对应控件的android:id属性值,xml文件中的写法大致是这样的:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/button_someName" />

程序中只要获得(即实例化)某个UI组件之后,你就可以通过代码来设置它的外观以及行为,监听器等。

官方手册

查看Android官方文档的地方除了Android官网以外,还能在Android SDK的目录中找到。推荐访问http://www.android-doc.com/

布局

布局定义

用户交互界面中最基本的构件块是View(视图)对象。由View类创建,在屏幕上占据了一块矩形区域,并对绘制和事件处理作出相应。View类也是各种控件的基类。ViewGroup(视图组)是View类的一个子类,提供不可见的容器,可容纳其他的视图、视图组,定义它们的布局特性。下图展示了布局参数的层次。它能在程序运行时使用View或者ViewGroup对象来创建,也能在项目的res/layout目录下的activity_main.xml文件中声明。
V布局参数层次
一个布局可以包含许多的部件,比如按钮、文本标签、文本框等等。
下面是一个线性布局的XML文件的例子:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

   <TextView android:id="@+id/text"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="This is a TextView" />

   <Button android:id="@+id/button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="This is a Button" />

   <!-- 更多的UI组件从这里开始编辑  -->

</LinearLayout>

只要布局创建好了,你就能在应用的Activity代码中加载这些布局资源。

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
}

布局的属性

每个布局都有一系列的属性可用于定义其特性。下面是一些常用的属性,每个布局适用的属性不一,具体的需要查阅官方文档。

android:id:为一识别该视图的IDandroid:layout_width:布局的宽度。
android:layout_height:布局的高度。
android:layout_marginTop:布局顶部的额外空间。
android:layout_marginBottom:布局底部的额外空间。
android:layout_marginLeft:布局左部的额外空间。
android:layout_marginRight:布局右部的额外空间。
android:layout_gravity:指定子视图的放置方式。
android:layout_weight:权重。指定了在布局中,应该分配多少的额外空间给某个视图。
android:layout_x:指定了布局的X坐标。
android:layout_y:指定了布局的Y坐标。
android:paddingLeft:布局左边的内边距。
android:paddingRight:布局右边的内边距。
android:paddingTop:布局顶部的内边距。
android:paddingBottom:布局底部的内边距。

上述属性中,宽和高的单位可以是dp、sp、pt、px、mm和in等。
更常用的是你可以用下列属性值来度量宽度和高度,此处以宽度的设置为例:

android:layout_width=wrap_content:此处wrap_content能让视图根据自身内容的情况来决定其尺寸。
android:layout_width=fill_parent:此处fill_parent能让视图始终占据其父视图的所有空间。

另外,属性gravity在放置视图时也起了很重要的作用,你能使用如下所示的一个或多个属性值(如果是多个请用“|”隔开)。

top:将对象放置在容器的顶端而不改变其尺寸。
bottom:将对象放置在容器的底端而不改变其尺寸。
left:将对象放置在容器的左端而不改变其尺寸。
right:将对象放置在容器的右端而不改变其尺寸。
center_vertical:将对象放置在容器的垂直方向中心处而不改变其尺寸。
center_horizontal:将对象放置在容器的水平方向中心处而不改变其尺寸。
fill_vertical:在需要时增加对象在垂直方向上的尺寸,以完全充满它的容器。
fill_horizontal:在需要时增加对象在水平方向上的尺寸,以完全充满它的容器。
center:将对象放置在容器的中心而不改变其尺寸。
fill:增加对象在水平、垂直方向上的尺寸,以完全填满它的容器。

视图标识

一个视图对象可以像人一样,拥有分配给它的唯一ID。这个ID用于在项目中识别该视图。
在XML标签中分配ID的写法如下:

android:id="@+id/组件的ID名称"

这里的ID名称可以是button_1之类的字样。
为了创建这个视图对象的实例,以及从布局中捕获它,请参考下列的java代码写法。

//声明一个Button对象
Button myButton = (Button)findViewByID(R.id.my_button);
//使用findViewByID()方法来完成组件的实例化过程。

布局的类型

你可以根据应用的实际需求来选择下列的布局。

线性布局LinearLayout:线性布局是一个视图组(ViewGroup),能在水平或者垂直的单一方向上将所有子元素排成一行。
相对布局RelativeLayout:相对布局是一个将子视图显示在相对的位置上的布局。
表格布局TableLayout:表格布局是在行、列中组合子元素的视图。
绝对布局AbsoluteLayout:绝对布局能让你指定子元素的精确位置。
帧布局FrameLayout:帧布局是一个屏幕上的占位符,你可以用它来显示单一视图。
列表视图ListView:列表布局是可以滚动的,是用于显示子元素列表的视图组。
网格视图GridView:网格视图是在二维可滚动的网格中显示子元素的视图组。

下面主要对两种布局进行详细说明。
(1)线性布局LinearLayout
线性布局LinearLayout中的组件会按照顺序依次排列。根据android:orientation属性设置的不同,LinearLayout中的组件可以按照水平方向或者竖直方向来排列。需要注意的是,当一行上或者一列上的组件排列到屏幕的边缘时,这一行(或一列)余下的组件则可能不会显示。
设置LinearLayout时常用的属性主要有下面几个:

android:orientation:该属性决定了布局管理器内的组件的排列方式,即按照水平方向排列(属性值horizontal)或者垂直方向(属性值vertical)排列,默认为后者。
android:gravity:译成中文就是“重力”,该属性决定了布局管理器内的组件的对齐方式。可用选项有left、right、top、bottom、center等(更多属性请查阅文档),它们可以单独使用,也可以用|符合组合起来,比如top|center_vertical。对应的java代码是setGravity(int)。
android:baselineAligned:该属性决定了布局管理器内的子元素是否与其基线(Base Line)对齐。
android:divider:该属性决定了布局管理器的排列方式为垂直(vertical)时,是否显示子元素之间的分隔条。

在LinearLayout中摆放的子元素常用的属性有:

android:layout_weight:这是比较常用的一个属性,它决定了该元素在LinearLayout中的所占的权重。例如你想让两个Button在同一行中各占50%的宽度,则可以将两个按钮的宽度都设置为android:layout_width="0dp",再各自辅以这个属性android:layout_weight=1,那么无论屏幕宽度是多少,它们都会自动地占据这一行一半的宽度。
android:layout_gravity:该属性决定了子元素在LinearLayout中的对齐方式,相对于android:gravity,这是只对当前子元素(比如线性布局中的某个按钮)有效的,而后者是对其包含的所有子元素(线性布局中的所有元素)有效。

(2)表格布局——TableLayout
表格布局TableLayout与LinearLayout类似,也是线性布局的一种,只是它能同时通过行和列的形式来排列组件。如果你需要使用这类布局,你需要往TableLayout中添加名为TableRow的子组件来控制每一行的内容,需要用多少行就添加多少行。每一行中的组件排列方式则与LinearLayout是相同的。
设置TableLayout时常用的属性除了LinearLayout中的以外,还有以下几个:

android:shrinkAllColumns:该属性设置了能被收缩的列的序号,对应的java代码是setShrinkColumns(boolean)
android:collapseColumns:对应的java代码是setCollapseColumns(int, boolean)
android:stretchAllColumns:对应的java代码是setStretchColumns(boolean)

持续更新中ing。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值