第三章 界面UI的基石—UI布局(1)

第三章界面UI的基石—UI布局

上一章我们一起学习了Android中的常用组件及一些UI编程的技术。在此基础上,我们就可以将这些组件有效的组织起来,构成一个美观、合理的界面。

在本章,我们先来详细说明Android中UI的几种布局,通过这几种布局就能将组件有效的组合到一起。然后说明在Android开发中如何应用样式和主题,通过样式和主题,可以预定义一系列的属性值,使整个应用程序形成统一的显示风格。

3.1用户界面的基本单元—View视图

在Android SDK中,View(视图类是视图类的一个超类。View代表了用户界面组件的一块可绘制的空间块。每一个View在屏幕上占据一个长方形区域。在这个区域内,这个View对象负责图形绘制和事件处理。每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展。在游戏开发中也可以自定义View,这样画布的功能更能满足我们开发的需要。在Android SDK开发中,任何一个自定义的View都只需要重写onDraw()方法来实现界面显示。自定义的View可以是复杂的3D实现,也可以是非常简单的文本形式等。

下面,我们以一个为图片添加边框的例子来看看View是如何工作的吧。

首先,我们定义一个MyImageView继承自ImageView:


// import略

public class MyImageView extends ImageView{

private int color;

private int borderwidth;

public Canvas canvas = new Canvas();

public int status = 0;

public MyImageView(Context context) {

super(context);

}

public MyImageView(Context context, AttributeSet attrs,

int defStyle) {

super(context, attrs, defStyle);

}

public MyImageView(Context context, AttributeSet attrs) {

super(context, attrs);

}

// 设置颜色

public void setColour(int color){

this.color = color;

}

// 设置边框宽度

public void setBorderWidth(int width){

borderwidth = width;

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

this.canvas = canvas;

// 画边框

Rect rec = canvas.getClipBounds();

rec.bottom--;

rec.right--;

Paint paint = new Paint();

// 设置边框颜色

paint.setColor(color);

paint.setStyle(Paint.Style.STROKE);

// 设置边框宽度

paint.setStrokeWidth(borderwidth);

canvas.drawRect(rec, paint);

}

}

接着,在布局文件中添加MyImageView。


<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

<com.chapter2.MyImageView

android:id="@+id/my_image"

android:layout_centerHorizontal="true"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:background="@drawable/ball"/>

</RelativeLayout>

然后,在Activity中定义MyImageView,并为它设定边框宽度和颜色。


MyImageView image = (MyImageView)findViewById(R.id.my_image);

image.setBorderWidth(5);

image.setColour(Color.WHITE);

运行程序,让我们来看看效果图,如图3-1所示。

图3-1 为图片添加边框

可以看到,我们已经为这张图片添加好了边框。

在这个例子中,我们自定义了一个继承自ImageView的View,并重写了onDraw()方法,在onDraw()方法中对界面进行了重新的绘制,其中关于Canvas及Paint的使用,我们在后续的章节中会有介绍。

经验分享:
我们在写布局文件的时候,第一行需要加入:
xmlns:android="http://schemas.android.com/apk/res/android"
这个是xml的命名空间,有了它,当你需要输入内容时,你就可以按住“alt”和“/”键,这个时候,它就会提示你接下来有哪些是可以供选择输入的;另外,它还可以帮助你判断语法,当你出错的时候会给出相应的提示。
时间: 2025-01-09 15:14:46

第三章 界面UI的基石—UI布局(1)的相关文章

[看书][CSS精粹(第2版)]第三章 CSS和图像 & HTML网页布局

本章主要讲述作为背景图像方面的技巧. 1.边框(添加边框样式.去除边框): 2.为页面设置背景图像,位置设定,固定背景图像: 3.为任意元素设置背景图像: 4.文字放在图像的上面(作为背景图像): 5.为文档添加多个背景图像(本例利用html和body元素产生多重背景图像的效果): 6.在页面中使用透明效果(使用PNG格式图像). 利用网络搜索补充学习了padding的4个方向顺序(上右下左 顺时针),流式布局(看网上的解释结合书里的描述,大概是指页内布局元素采用百分数指定位置和大小). [个人

第三章 界面UI的基石—UI布局(2)

3.2百花齐放-各种Layout布局 3.2.1Layout布局的简单介绍 一般的,一个Android视图中会有很多的控件.为了界面的合理.美观,我们需要让它们按照我们设计好的思路排列在界面上,那么,我们就需要容器来存放这些控件,并控制它们的位置排列,就像HTML中的div.table一样,Android布局也起到了同样的作用. Android布局有很多种,它们各有各的特点,分别应用在不同的场合,而且可以嵌套使用.我们要根据我们的界面设计选择合适的布局,可能有些时候不同的布局可以达到同样的效果,

第三章 界面UI的基石—UI布局(3)

3.2.4框架布局(FrameLayout) FrameLayout是五大布局中最简单的一个布局,也称为层布局或者是帧布局.在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,层叠式排列.此布局无法控制子控件的大小和位置,但是子控件自身可以控件其大小和位置.后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住(除非后一个子元素是透明的).此布局通常用于游戏或者处理一些画廊程序. 我们也以一个简单的例子来说明. <?x

第三章 界面UI的基石—UI布局(5)

3.3样式(Style)和主题(Theme)的使用 3.3.1样式(Style)的使用 不管是应用开发还是游戏开发,我们开发出来的产品,大部分的时候还是要让更多的人来使用的.因此,除了功能上的完善之外,布局上的合理而美观也是我们需要考虑的问题.Style和Theme的设计就是提升用户体验的关键之一. Style和Theme都是为了改变样式,但是二者又略有区别: 1)Style是针对窗体元素级别的,改变指定控件或者Layout的样式. 2)Theme是是针对窗体级别的,改变窗体样式. 它们的使用是

第三章 界面UI的基石—UI布局(4)

3.2.5表单布局(TableLayout) TableLayout,即表单布局,以行和列的形式管理控件.每行为一个TableRow对象,也可以为一个View对象.当为View对象时,该对象将横跨该行所有列. 同样的,我们也以一个简单的例子来加以说明,看完例子之后相信大家对TableLayout的应用会有一个比较全面的了解. <?xml version="1.0" encoding="utf-8"?> <TableLayout xmlns:andr

Android界面编程——Android高级UI组件(三)

Android界面编程 Android高级UI组件 2.4.1适配器组件 适配器的作用 适配器充当适配器控件和该视图数据之间的桥梁.适配器提供访问的数据项,并负责产生数据组中的每个项的视图. 常用的适配器 BaseAdapter:抽象类,具有较高的灵活性. ArrayAdapter:最为简单,智能展示一行文字. SimpleAdapter:有较好的扩充性,可以自定义出各种效果. SimpleCursorAdapter:主要用于操作数据库. 常用的适配器控制 适配器控件扩展自ViewAdapter

第二章 吸引你的眼球—UI编程(1)

第二章 吸引你的眼球-UI编程 学习Android应用程序的开发技术,除了先要熟悉相关工具以外,最直接的,就是学习如何使用各种UI组件.我们开发的应用程序,一般都会包含一组用户可见的界面,而这些界面就是由一个个的AndroidUI组件组成的.我们在学习界面开发技术的过程中,首先就要熟悉这些组件,然后才能将它们有效的组织起来,构成一个美观.合理的界面. 本章会先详细讲解一些常用的UI组件,及如何自定义组件,然后会说明一些其它常用的UI编程技术. 2.1 UI基础-常用UI组件 Android的组件

Android教材 | 第三章 Android界面事件处理(二)—— 杰瑞教育原创教材试读

 编者按 JRedu 杰瑞教育原创系列教材将于年后与大家正式见面.为更好的借鉴读者意见,我们将会陆续地在博客园推出一系列教材试读.我们也热忱的欢迎广大博友与我们互动,提出宝贵意见. 本篇博客将推出教材第三章第二部分的试读(传送门:第一部分),请大家继续提出宝贵意见,我们也将为积极互动的博友,免费提供我们的原创教材以及更多福利,也欢迎大家加入最下方QQ群与我们交流,谢谢大家! 3.5 系统设置事件处理 3.5.1onConfigurationChanged响应事件 在App开发过程中,有时候需要获

Android异步处理系列文章四篇之一使用Thread+Handler实现非UI线程更新UI界面

目录: Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Looper+MessageQueue深入详解Android异步处理四:AsyncTask的实现原理 Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面 概述:每个Android应用程序都运行在一个dalvik虚拟机进程中,进程开始的时候会启动一个主线程(MainTh