目录
1.1通过代码示例学习Android的View组件及应用(第1部分) (2)
1.1.1Android的View组件 (2)
1.1.2在Android UI中应用帧布局FrameLayout及示例 (7)
1.1.3在Android UI中应用LinearLayout布局及示例 (10)
1.1.4绝对布局AbsoluteLayout及应用示例 (19)
1.1.5相对布局RelativeLayout及应用示例 (22)
1.1通过代码示例学习Android的View组件及应用(第1部分)
1.1.1Android的View组件
1、Android中的UI框架
(1)Android使用的UI框架类似于其他基于桌面的全功能UI框架
实际上,它在本质上更加先进,更具异步特征。如果将基于C的传统Microsoft Windows API看做第一代UI框架,将基于C++的MFC(Microsoft Foundation Classes,Microsoft基础类)看做第二代。基于Java的Swing UI框架可以看做第三代,它比MFC具有更高的设计灵活性。
(2)Android UI是声明性的
Android UI、JavaFX、Microsoft Silverlight和Mozilla XUL(XML User Interface Language,XML用户界面语言)都是第四代UI框架的新成员,它们的UI是声明性的,具有独立的主题。
2、什么是View
(1)Activity是Android程序的显示层,每一个显示窗口都是一个Activity 可是Activity本身无法显示在屏幕上,我们可以把它理解成是一个抽象层,一个壳子;就譬如一个JSP页面,它本身并没有显示出来任何东西,负责显示的是他生成的HTML标签。那么Android里谁才是真正显示出来的部分?
(2)视图组件(View)
在Android当中View类是最基本的一个UI类,基本上所有的高级UI组件都继承View 类而实现的,常用的有TextView,Button,List,EditText,RadioButton,Checkbox等都是View类。
一个视图(View)在屏幕上占据了一块矩形区域,它负责渲染这块矩形区域(如改变背景色),也可以处理这块矩形区域发生的事件(如用户点击了这块区域),并且可以设置这块区域是否可见,是否可以获取焦点等。
(3)两种主要的视图组件View和ViewGroup(而ViewGroup其实是View的子类)首先UI组件是按层次结构来由外到内的方式逐步展示的。要将一个屏幕元素层次树绑定在一个屏幕上显示,Activity会调用它的setContentView()方法并且传入这个层次树的根
节点引用。
当Activity被激活并且获得焦点时,系统会通知activity并且请求根节点去计算并绘制树,根节点就会请求它的子节点去绘制它们自己。每个树上的ViewGroup节点会负责绘制它的子节点。
ViewGroup会计算它的有效空间,布局所有的子显示对象,并最终调用所有的子显示对象的Draw()方法来绘制显示对象。各个子显示对象可以向父对象请求它们在布局中的大小和位置,但最终决定各个子显示对象的大小和位置的是父对象。
(3)Android程序借助View和ViewGroup对象来构建用户界面
ViewGroup是个特殊的View,它继承于android.view.View。它的功能就是装载和管理下一层的View对象或ViewGroup对象,也就说他是一个容纳其它元素的的容器——它负责对添加进ViewGroup的这些View进行布局。一个ViewGroup也可以加入到另外一个ViewGroup中。
ViewGroup是布局管理器(layout)及view容器的基类。在ViewGroup类中,还定义了一个嵌套类https://www.doczj.com/doc/be6067368.html,youtParams。这个类定义了一个显示对象的位置、大小等属性,view通过LayoutParams中的这些属性值来告诉父级,它们将如何放置。
3、Android UI类层次
Android中所有的UI都是建立在View和ViewGroup(它为View类的一个重要的子类,但ViewGroup通常作为其它组件的容器使用)这两个类的基础之上,所有View的子类成为“Widget”,而所有的VIewGroup的子类都成为“Layout”。
但由于ViewGroup是一个抽象类,因此实际使用中通常是使用ViewGroup的子类来作为容器,例如各种布局管理器。
4、控制Android UI布局的内部类
ViewGroup容器控制其子组件的分布状况(布局规则)是依赖于如下的两个内部类https://www.doczj.com/doc/be6067368.html,youtParams、ViewGroup.MarginLayoutParams,这两个内部类中都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。
(1)https://www.doczj.com/doc/be6067368.html,youtParams支持的属性
●https://www.doczj.com/doc/be6067368.html,yout_height:指定该子组件的基本高度
●https://www.doczj.com/doc/be6067368.html,yout_width:指定该子组件的基本宽度
而https://www.doczj.com/doc/be6067368.html,yout_height和https://www.doczj.com/doc/be6067368.html,yout_width两个属性支持如下三个属性值:
●fill_parent:指定子组件的高度、宽度与父容器组件的宽度、高度相同(实际上还要
减去填充的空白距离)。
●match_parent:该属性值与fill_parent完全相同,而且从Android2.2开始就推荐使用
该属性来替代fill_parent,但由于ADT生成的UI组件总是使用fill_parent属性值的,所以很多时候还是使用fill_parent。
●wrap_content:指定子组件的大小恰好能包裹它的内容即可。
(2)ViewGroup.MarginLayoutParams用于控制子组件周围的页边距
●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)实现
5、常用Layout介绍
为了更好的管理Android应用的用户界面里的个组件,Android提供了布局管理器,通过布局管理器,Android应用的图形用户界面具有良好的平台无关性。因为不同手机它们的屏幕的分辨率、尺寸并不完全相同,而Android的布局管理器可以根据运行平台来调整组件的大小,而我们所需要做的就是选择合适的布局管理器。
但与Swing编程不同的是,Android的布局管理器本身就是一个UI组件,所有的布局管理器都是ViewGroup的子类。所有布局都可作为容器类使用,因此可以调用多个重载的addView()向布局管理器中添加组件,当然我们也可以用一个布局管理器嵌套其他布局管理器。
(1)典型的布局
●帧布局(框架布局)FrameLayout
●线性布局LinearLayout
●绝对布局AbsoluteLayout
●相对布局RelativeLayout
●表格布局TableLayout
●标签布局(Tab Layout):它是一个ViewGroup以标签的方式显示它的子视图(View)
元素,就像在Firefox中的一个窗口中显示多个网页一样。
●列表视图(ListView):它是一个ViewGroup以列表显示它的子视图(View)元素,
列表是可滚动的列表。
●网格视图(Grid View):它是一个ViewGroup以网格显示它的子视图(View)元素,
即二维的、滚动的网格。
(2)帧布局FrameLayout
在该布局方式下的所有显示对象都将固定在屏幕的左上角,不能指定位置。所有添加到这个布局中的视图都以层叠的方式显示,第一个添加的组件放到最底层,最后添加到框架中的视图显示在最上面。下层控件将会被覆盖,除非后一个子元素是透明的。
(3)线性布局LinearLayout:
线性布局是所有布局中最常用的布局之一,也是RadioGroup、TabWidget、TableLayout、TableRow、ZoomControls类的父类。LinearLayout可以让它的子元素垂直或水平的方式排成一行(不设置方向的时候默认按照垂直方向排列、并且以设置的垂直或水平的属性值来
排列所有的子元素)。
所有的子元素都被堆放在其它元素之后,因此一个垂直列表的每一行只会有一个元素,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子元素的高度加上边框高度)。LinearLayout保持子元素之间的间隔以及互相对齐(相对一个元素的右对齐、中间对齐或者左对齐)。
LinearLayout还支持为单独的子元素指定weight。好处就是允许子元素可以填充屏幕上的剩余空间。这也避免了在一个大屏幕中,一串小对象挤成一堆的情况,而是允许他们放大填充空白。子元素指定一个weight值,剩余的空间就会按这些子元素指定的weight比例分配给这些子元素。默认的weight值为0。例如,如果有三个文本框,其中两个指定了weight值为1,那么,这两个文本框将等比例地放大,并填满剩余的空间,而第三个文本框不会放大。
(4)绝对布局AbsoluteLayout
绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。
在绝对定位中,如果子元素不设置layout_x和layout_y,那么它们的默认值是0,也就是说它会像在FrameLayout一样这个元素会出现在左上角。
坐标(0,0)为左上角,当向下或向右移动时,坐标值将变大。AbsoluteLayout没有页边框,允许元素之间互相重叠。
(5)相对布局RelativeLayout
相对布局RelativeLayout允许子元素指定它们相对于其父元素或兄弟元素(通过ID指定)的位置,这是实际布局中最常用的布局方式之一。它灵活性大很多,当然属性也多,操作难度也大,属性之间产生冲突的的可能性也大,使用相对布局时要多做些测试。
因此,可以以右对齐或上下或置于屏幕中央的形式来排列两个元素。元素按顺序排列,因此如果第一个元素在屏幕的中央,那么相对于这个元素的其它元素将以屏幕中央的相对位置来排列。如果使用XML配置文件来指定这个布局(layout),在你定义它之前,被关联的元素必须定义。
(6)表格布局TableLayout
表格布局TableLayout以行列的形式管理子元素,每一行是一个TableRow布局对象(一个TableLayout由许多的TableRow所组成),当然也可以是普通的View对象,TableRow
里每放一个元素就是一列,总列数由列数最多的那一行决定。
TableLayout容器不会显示row、cloumns或cell的边框线。每个row拥有0个或多个的cell;每个cell拥有一个View对象。表格由列和行组成许多的单元格。表格允许单元格为空。但单元格不能跨列,这与HTML中表格是不一样的。
1.1.2在Android UI中应用帧布局FrameLayout及示例
1、AndroidDemoActivity的程序代码
package com.px1987.androiddemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class AndroidDemoActivity extends Activity{
private static final String TAG="AndroidDemoActivity";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(https://www.doczj.com/doc/be6067368.html,yout.main);
}
public void buttonClickEventMethod(View button){
Log.i(TAG,"按钮的Click事件响应方法buttonClickEventMethod正在执行");
}
}
在程序中定义了按钮的点击事件的响应方法buttonClickEventMethod,并在事件触发后显示出相关的提示信息。
2、string.xml文件的内容
为下面的按钮定义其中的显示文字信息。
3、main.xml文件的内容
android:layout_width="fill_parent" android:layout_height="fill_parent">
在main.xml文件中应用帧布局FrameLayout,并在该布局中定义了两个UI组件——一个按钮和TextView。并且为按钮定义了点击的事件响应方法buttonClickEventMethod和按钮的提示信息文字等属性项目。TextView组件在XML定义文件中的主要属性如下:
●android:typeface:字体monospace
●android:textStyle:字形,bold italic、bold|italic
●android:textColor:文字颜色,#FF0000或者red
●android:textSize:文字的尺寸,例如“25px”。在尺寸方式,有时我们使用px(像
素),有时使用dip(dip指的是一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px,采用dip,我们可以无须考虑像素是否密集,而获取我们期待的大小,因此推荐使用dip)。
●android:gravity:内容的定位,center,left,right等等
●android:background:文字的背景色,采用RGB方式
●android:singleLine:值为flase或者ture,如果false这允许多行。
在Eclipse工具中可以将鼠标光标放入某个组件的标签内,然后按“Alt+/”将能够显示出该组件的XML标签中的各个属性项目及含义,有助于开发实现。
4、程序执行的结果
5、点击其中的按钮后的事件响应方法的执行结果
1.1.3在Android UI中应用LinearLayout布局及示例
1、打开main.xml文件,并清除其它无关的内容
然后切换到Graphical Layout视图中
2、在main.xml文件中添加一个LinearLayout布局
水平或者竖值都可以,产生出下面的标签内容
android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent">
3、在其中再加两个子LinearLayout布局,其中一个为竖值、另一个为水平
注意布局之间是可以相互嵌套的——树形结构的嵌套,比如一个线性布局的里面嵌套一个相对布局,从而产生出更复杂的定义。
android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:orientation="vertical"> android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal">
其中的android:layout_weight属性是指这个控件在父控件中所占的比重,比如一个LinearLayout里放了3个TextView。如果分别设置这3个TextView的比重为1、1、2,那么这3个TextView的大小就为1:1:2。
线性布局(LinearLayout)是一个一行或者一列只能放置一个控件的布局,可以分为垂直线性布局(产生出一列的效果)和水平线性布局(产生出一行的效果)。
4、在第1个子LinearLayout布局中添加一个TextView组件
注意定位要准确和正确,否则将不能正确地加入到第1个子LinearLayout布局中,或者可以直接在源XML标签状态下添加,可能更方便。
5、编辑修改该TextView组件的相关属性
右击TextView组件,然后再弹出的快捷菜单中进行相应的操作。
将Text属性设置为“这是在LinearLayout布局中的TextView组件”、ID属性设置为firstTextViewID。
6、在第2个子LinearLayout布局中添加两个TextView组件
android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:orientation="vertical"> android:id="@+id/firstTextViewID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="这是在LinearLayout布局中的TextView组件"/> android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView"/> android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView"/>
7、设置这两个TextView组件的相关属性
由于在可视化界面中很多属性的编辑都不支持,建议还是在XML源标签中选择性地输入和编辑
8、最终的布局设计的结果
android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:orientation="vertical"> android:id="@+id/firstTextViewID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="这是在LinearLayout布局中的TextView组件"/> android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> android:background="#aa0000" android:gravity="center_horizontal" android:id="@+id/secondTextViewID" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="第2个LinearLayout布局中的左面TextView组件" android:layout_weight="1"/> android:background="#00aa00" android:gravity="center_horizontal" android:id="@+id/thirdTextViewID" android:layout_width="wrap_content" android:layout_height="fill_parent" android:text="第2个LinearLayout布局中的右面TextView组件" android:layout_weight="1"/>
在LinearLayout布局中有两个非常相似的属性:android:gravity与android:layout_gravity。他们的区别在于:android:gravity用于设置View组件的对齐方式(对该view内容的限定),而android:layout_gravity用于设置Container组件的对齐方式(设置该view相对于其父View
的位置)。
举个例子,我们可以通过设置android:gravity="center"来让EditText中的文字在EditText 组件中居中显示;同时我们设置EditText的android:layout_gravity="right"来让EditText组件在LinearLayout中居中显示。
9、AndroidDemoActivity代码示例
package com.px1987.androiddemo;
import android.app.Activity;
import android.os.Bundle;
public class AndroidDemoActivity extends Activity{
private static final String TAG="AndroidDemoActivity";
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(https://www.doczj.com/doc/be6067368.html,yout.main);
}
}
由于在界面布局中没有应用到string.xml中的相关资源,因此对于string.xml不需要其中的符号定义。
10、执行本程序
11、理解“fill_parent”和“wrap_content”的不同点
将下面的两个TextView组件的android:layout_height="fill_parent"改变为
android:layout_height="wrap_content",再执行并观察结果的差别。
android:id="@+id/linearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:id="@+id/linearLayout2" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight="2" android:orientation="vertical"> android:id="@+id/firstTextViewID" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="这是在LinearLayout布局中的TextView组件"/> android:id="@+id/linearLayout3" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal"> android:background="#aa0000" android:gravity="center_horizontal" android:id="@+id/secondTextViewID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第2个LinearLayout布局中的左面TextView组件" android:layout_weight="1"/> android:background="#00aa00" android:gravity="center_horizontal" android:id="@+id/thirdTextViewID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="第2个LinearLayout布局中的右面TextView组件" android:layout_weight="1"/>
wrap_content:让控件根据自己的内容需要来定义自己大小;而fill_paren(在API LEVEL 8以后版本中改为match_parent),则是让控件充满父控件。
12、区分padding和layout_margin属性的差别
padding属性通常用来描述控件里面的内容与控件的关系,而layout_margin通常用来描述控件之间的位置关系。两者都可以加上方向,即paddingLeft这种格式,不加方向则代表四周都有这个属性。
1.1.4绝对布局AbsoluteLayout及应用示例
1、可以实现任意位置布局,通过设置其x、y属性可以决定其在父容器位置
(1)AbsoluteLayout也就是绝对布局
又常称为坐标布局,在布局上灵活性比较大,但很难适配于任何屏幕大小、像素,比如在屏幕旋转时有明显弊端。
用坐标布局时,需要注意坐标原点为屏幕左上角,这和电脑屏幕的设置时一样一样的,添加视图时,要精确的计算每个视图的像素大小,最好先在纸上画草图,并把所有元素的像素定位计算好。
(2)主要的特性
该布局没有屏幕边框,允许元素之间互相重叠。
2、布局代码示例
(1)布局要点
绝对布局相对来说非常简单,只要在控件中用android:layout_x和android:layout_y属性指定控件横纵坐标就可以了。
(2)main.xml文件示例
android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> android:text="AbsoluteLayout布局应用示例" android:layout_width="fill_parent" android:layout_height="wrap_content"/>
(3)界面效果
android 自定义圆角头像以及使用declare-styleable进行配置属性解析由于最新项目中正在检查UI是否与效果图匹配,结果关于联系人模块给的默认图片是四角稍带弧度的圆角,而我们截取的图片是正方形的,现在要给应用统一替换。应用中既用到大圆角头像(即整个头像是圆的)又用到四角稍带弧度的圆角头像,封装一下以便重用。以下直接见代码 [java] view plain copy 在CODE上查看代码片派生到我的代码片 package com.test.demo; import com.test.demo.R; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapShader; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Shader.TileMode; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Parcelable; import android.util.AttributeSet; import android.util.Log; import android.util.TypedValue; import android.widget.ImageView; /** * 圆角imageview */ public class RoundImageView extends ImageView { private static final String TAG = "RoundImageView"; /** * 图片的类型,圆形or圆角 */ private int type; public static final int TYPE_CIRCLE = 0; public static final int TYPE_ROUND = 1; /** * 圆角大小的默认值
第一章 Android简介 1.简述各种手机操作系统的特点. 答案: 目前,手机上的操作系统主要包括以下几种,分别是Android、iOS、Windows Mobile、Windows Phone 7、Symbian、黑莓、PalmOS 和Linux。 (1)Android是谷歌发布的基于Linux的开源手机平台,该平台由操作系统、中间件、用户界面和应用软件组成,是第一个可以完全定制、免费、开放的手机平台。Android底层使用开源的Linux操作系统,同时开放了应用程序开发工具,使所有程序开发人员都在统一、开放的开发平台上进行开发,保证了Android应用程序的可移植性。 (2)iOS是由苹果公司为iPhone、iPod touch、iPad以及Apple TV开发的操作系统,以开放源代码的操作系统Darwin为基础,提供了SDK,iOS操作系统具有多点触摸操作的特点,支持的控制方法包括滑动、轻按、挤压和旋转, 允许系统界面根据屏幕的方向而改变方向,自带大量的应用程序。 (3)Windows Mobile是微软推出的移动设备操作系统,对硬件配置要求较高,一般需要使用高主频的嵌入式处理器,从而产生了耗电量大、电池续航时间短和硬件成本高等缺点,Windows Mobile系列操作系统包括Smartphone、Pocket PC和Portable Media Center。
随着Windows Phone 7的出现,Windows Mobile正逐渐走出历史舞台。 (4)Windows Phone 7具有独特的“方格子”用户界面,非常简洁,黑色背景下的亮蓝色方形图标,显得十分清晰醒目,集成了Xbox Live游戏和Zune音乐功能,可见Windows Phone 7对游戏功能和社交功能的重视。 (5)Symbian是为手机而设计的实时多任务32位操作系统,它的功效低,内存占用少,提供了开发使用的函数库、用户界面、通用工具和参考示例。操作系统不是完全开放的,核心代码不开放,但是API文档是公开的。 (6)黑莓系统主要在黑莓手机上使用,其特色是支持电子邮件推送功能,邮件服务器主动将收到的邮件推送到用户的手持设备上,而不需要用户频繁地连接网络查看是否有新邮件。同时,黑莓系统提供手提电话、文字短信、互联网传真、网页浏览及其它无线信息服务功能。黑莓系统主要针对商务应用,具有很高的安全性和可靠性。 (7)PalmOS由拥有较多的第三方软件,是32位的嵌入式操作系统,主要在移动终端上使用,操作系统本身所占的内存极小,不具备录音和MP3播放功能。 (8)Linux手机操作系统具有开放源代码的特性,但是也包含入门难度高,集成开发环境差,Linux的产品与个人计算机的连接性较差,具有较强的开发实力的公司很少等不足。 2.简述Android平台的特征
android studio 控件常用属性 下面是RelativeLayout各个属性 1.android:layout_above="@id/xxx" --将控件置于给定ID控件之上 2.android:layout_below="@id/xxx" --将控件置于给定ID控件之下 3. android:layout_toLeftOf="@id/xxx" --将控件的右边缘和给定ID控件的左边缘对齐 4.android:layout_toRightOf="@id/xxx" --将控件的左边缘和给定ID控件的右边缘对齐 5. android:layout_alignLeft="@id/xxx" --将控件的左边缘和给定ID控件的左边缘对齐 6.android:layout_alignTop="@id/xxx" --将控件的上边缘和给定ID控件的上边缘对齐 7.android:layout_alignRight="@id/xxx" --将控件的右边缘和给定ID控件的右边缘对齐 8.android:layout_alignBottom="@id/xxx" --将控件的底边缘和给定ID控件的底边缘对齐 9.android:layout_alignParentLeft="true" --将控件的左边缘和父控件的左边缘对齐 10. android:layout_alignParentTop="true" --将控件的上边缘和父控件的上边缘对齐 11. android:layout_alignParentRight="true" --将控件的右边缘和父控件的右边缘对齐 12.android:layout_alignParentBottom="true" --将控件的底边缘和父控件的底边缘对齐 13.android:layout_centerInParent="true" --将控件置于父控件的中心位置 14.android:layout_centerHorizontal="true" --将控件置于水平方向的中心位置 15.android:layout_centerVertical="true" --将控件置于垂直方向的中心位置 android:layout_width 设置组件的宽度 android:layout_height 设置组件的高度 android:id 给组件定义一个id值,供后期使用 android:background 设置组件的背景颜色或背景图片 android:text 设置组件的显示文字 android:textColor 设置组件的显示文字的颜色 android:layout_below 组件在参考组件的下面 android:alignTop 同指定组件的顶平行
Android平台我的日记 设计文档 项目名称:mydiray 项目结构示意: 阶段任务名称(一)布局的设计 开始时间: 结束时间: 设计者: 梁凌旭 一、本次任务完成的功能 1、各控件的显示 二、最终功能及效果 三、涉及知识点介绍 四、代码设计 activity_main.xml: android:layout_centerHorizontal="true" android:layout_marginTop="88dp" android:text="@string/wo" android:textSize="35sp"/> 在 Eclipse 环境中进行 Android 应用程序开发 开始之前 本教程介绍如何在 Eclipse 环境中进行 Android 应用程序开发,包括两个示例应用程序。第一个示例是一个基本的应用程序,涉及构建和调试的所有阶段。第二个应用程序示例涉及比较复杂的 Android 特性,包括联系人搜索和 Google Maps 地址查找。要想从本教程获得最大收益,具备移动开发经验会有帮助,但不是必需的。开发 Android 应用程序需要Java? 编程技能,但是对于本教程不是必需的。 关于本教程 我们为什么要关注 Android?有两个原因使 Android 成为重要的平台。首先,Google 引入了 Android,它在很短时间内就获得了市场的关注。Google 正在进军移动市场。它在这个市场上采取的第一个行动就是发布 Android 和 Open Handset Alliance,这是一个令人印象深刻的起点。第二,Android 不仅仅是另一种包含电话、菜单和触摸屏功能的移动平台。您将在本教程中了解到,Android 提供了一种不同的应用程序开发方法。由于可以对请求的操作和代码进行运行时绑定,Android 的体系结构支持高度可定制的软件环境。无论是考虑市场因素还是 Android 的技术方面,它都是一个值得研究的平台。 本教程分为以下几节: ?Android 基础知识和必需的工具 ?Android Software Developer Kit ?构建和调试 SaySomething Android 应用程序 ?创建内容提供器和 Google Maps 应用程序 系统需求 本教程需要结合使用几种技术。 Eclipse 平台Eclipse 是一个运行插件的平台。您应该安装 Eclipse Classic 的最新版本(本教程使用 V3.3.1)。Android Developer Tools按照安装 Android SDK中的说明安装 Android Developer Tools(Eclipse 插件)。 源代码本教程中的源代码片段包括: ?AndroidManifest.xml(片段)—这个文件是 Android 应用程序的应用程序部署描述符。 ?IntentReceiver —演示 IntentReceiver 的实现,这个类处理 AndroidManifest.xml 文件中 IntentFilter 标记所公布的 intent。 ?SaySomething.java —实现一个 Android 活动,这是本教程的示例应用程序的主要入口点。 ?Main.xml —这个文件包含 Android 活动所用的视觉元素或资源。 ?R.java —这个文件是由 Android Developer Tools 自动生成的,它把视觉资源“连接” 到 Java 源代码。 ?AndroidManifest.xml(完整)—这是完整的 AndroidManfest.xml 文件,包含每个重要元素的描述。 今天我用自己写的一个Demo 和大家详细介绍一个Android开发中遇到的一些常用系统控件的使用技巧。 1.文本框TextView TextView的作用是用来显示一个文本框,下面我用两种方式为大家呈现TextView,第一种是通过xml布局文件 呈现,第二种是通过代码来呈现,由此可见Android 的界面开发真的是非常灵活。 view plaincopy to clipboardprint? 1. public class TextViewActivity extends Activity { 2. @Override 3. protected void onCreate(Bundle savedInstanceState) { 4. setContentView(https://www.doczj.com/doc/be6067368.html,yout.textview); 5. 6. LinearLayout ll = (LinearLayout) findViewById(R.id.textviewll); 7. TextView textView = new TextView(this); 8. //设置显示文字 9. textView.setText("从代码中添加一个TextView"); 10. //设置显示颜色 11. textView.setTextColor(Color.WHITE); 12. //设置显示字体大小 13. textView.setTextSize(18); 14. //设置显示背景颜色 15. textView.setBackgroundColor(Color.BLUE); 16. //设置锚点位置 17. textView.setGravity(Gravity.CENTER_VERTICAL|Gravity.CE NTER_HORIZONTAL); 18. //把这个view加入到布局当中 19. ll.addView(textView); 20. 21. super.onCreate(savedInstanceState); 22. } 23. } 1. 2. android 自定义控件的过程 invalidate()会导致computeScroll()以及onDraw()方法的执行computeScroll()方法是在屏幕流动的时候不停的去调用,scrollTo(int x,int y)则是滚动到相应的位置; scrollBy(int x, int y)则是移动一些距离,X为正是向左移动,为负时向右移动,Y与X的意义一个,只是是上下移动而已View对象显示在屏幕上,有几个重要步骤: 1.构造方法创建对象 2.测量View的大小onMeasure(int,int); 3.确定View的位置,View自身有一些权,决定权在父View手中. onLayout();基本上不常用,在继承View的时候基本上用不着,但在继承ViewGroup的时候的就要用到了,因为要对View进行布局,确定View的位置,确定的时候使用 指定子View的位置,左,上,右,下,是指在ViewGroup坐标系中的位置https://www.doczj.com/doc/be6067368.html,yout(int xtop,int ytop, int xbottom, int ybottom); 4.绘制View的内容onDraw(Canvas) 实现过程: 1、构造方法: /** * 在布局文件中声名的view,创建的时候由系统调用 * * @param context * 上下文对象 * @param attrs * 属性集 */ public MyToggleButton(Context context, AttributeSet attrs) { super(context, attrs); initView(); } 2、测量View的大小: /** * 测量尺寸时的回调方法 */ -- 任务一Android 开发环境的搭建 第一部分知识回顾与思考 1.Android 的四层架构分别包括哪几层?分别起到什么作用? 答:Linux 内核层(Linux Kernel ):基于Linux 内核,内核为上层系统提供了系统服务。 系统库层(Libraries ):系统库基于C/C++ 语言实现,通过接口向应用程序框架层提供编程接口。 应用框架层(Application Framework ):为开发者提供了一系列的Java API,包括图形用户界面组件 View 、SQLite 数据库相关的API 、Service 组件等。 应用程序层(Applications ):包含了Android 平台中各式各样的应用程序。 第二部分职业能力训练 一、单项选择题(下列答案中有一项是正确的,将正确答案填入括号内) 1.Android 四层架构中,应用框架层使用的是什么语法?(C)A .CB .C++C.Java D.Android 2.Android 四层架构中,系统库层使用的是什么语法?(B)A .VBB.C /C++C.Java D .Android 3.应用程序员编写的Android 应用程序,主要是调用(B)提供的接口进行实现。 A .应用程序层DCB.应用框架层.应用视图层.系统库层 二、填空题(请在括号内填空) 1.在Android 智能终端中,有很多应用如拍照软件、联系人管理软件,它们都属于Android 的(应用程 序)层。 2.为了让程序员更加方便的运行调试程序,Android 提供了(模拟器),可以方便的将程序运行其上, 而不要实际的移动终端。 程序运行,我们需要安装(Java 3.为了支持)。JDK 三、简答题 1.简述Android 开发环境安装的步骤。 答:下载并安装JDK ,配置JDK 的环境变量; 从Anroid 官网上下载Android 开发组件(包含Eclipse 和 Android开发日志—常用控件篇(容器控件) android简介: Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。尚未有统一中文名称,中国大陆地区较多人使用“安卓”或“安致”。Android操作系统最初由Andy Rubin开发,主要支持手机。 Android的系统架构和其操作系统一样,采用了分层的架构。 Android结构 从架构图看,Android分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。开发人员也可以完全访问核心应用程序所使用的API框架。该应用程序的架构设计简化了组件的重用;任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块(不过得遵循框架的安全性)。同样,该应用程序重用机制也使用户可以方便的替换程序组件。 隐藏在每个应用后面的是一系列的服务和系统, 其中包括; 丰富而又可扩展的视图(Views),可以用来构建应用程序,它包括列表(Lists),网格(Grids),文本框(Text boxes),按钮(Buttons),甚至可嵌入的web 浏览器。 内容提供器(Content Providers)使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据 资源管理器(Resource Manager)提供非代码资源的访问,如本地字符串,图形,和布局文件(Layout files )。 通知管理器(Notification Manager) 使得应用程序可以在状态栏中显示自定义的提示信息。 活动管理器( Activity Manager) 用来管理应用程序生命周期并提供常用的导航回退功能。 Android开发四大组件分别是:活动(Activity):用于表现功能。服务(Service):后台运行服务,不提供界面呈现。广播接收器(BroadcastReceiver):用于接收广播。内容提供商(Content Provider):支持在多个应用中存储和读取数据,相当于数据库。 活动(当前界面视图): Android进阶——自定义View之自己绘 制彩虹圆环调色板 引言 前面几篇文章都是关于通过继承系统View和组合现有View来实现自定义View的,刚好由于项目需要实现一个滑动切换LED彩灯颜色的功能,所以需要一个类似调色板的功能,随着手在调色板有效区域滑动,LED彩灯随即显示相应的颜色,也可以通过左右的按钮,按顺序切换显示一组颜色,同时都随着亮度的改变LED彩灯的亮度随即变化,这篇基本上把继承View重绘实现自定义控件的大部分知识总结了下(当然还有蛮多没有涉及到,比如说自适应布局等),源码在Github上 一、继承View绘制自定义控件的通用步骤 自定义属性和继承View重写onDraw方法 实现构造方法,其中public RainbowPalette(Context context, AttributeSet attrs) 必须实现,否则无法通过xml引用,public RainbowPalette(Context context) ,public RainbowPalette(Context context, AttributeSet attrs, int defStyleAttr)可选,通常在构造方法中完成属性和其他成员变量的初始化 重写onMeasure方法,否则在xml中有些设置布局参数无效 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(width, height);//重新设置View的位置,若不重写的话,则不会布局,即使设置centerInParent为true也无效 //setMeasuredDimension(width,height); } 手动调用invalidate或者postInvalidateon方法完成界面刷新 重写onTouchEvent方法实现基本的交互 定义回调接口供外部调用 二、彩虹圆环调色板设计思想 一、填空题 1、下列哪个不是Activity的生命周期方法之一() A. onCreate B. startActivity C. onStart D. onResume 2、下列用于进行文本输入的组件是() A、TextView B、Button C、EditText D、Label 3、下面哪个不是Android的界面布局方式() A、BorderLayout B、LinearLayout C、TableLayout D、RelativeLayout 4、下列不是手机操作系统的是( ) A. Android B. Window Mobile C. Apple IPhone IOS D.windows vista 5、定义LinearLayout垂直方向布局时设置的属性是() A.android:layout_height B.android:gravity C.android:layout D. android:orientation vertical 6、Android 项目工程下面的assets 目录的作用是什么( ) A、放置应用到的图片资源。Res/drawable B、主要放置一些文件资源,这些文件会被原封不动打包到apk 里面 C、放置字符串,颜色,数组等常量数据res/values D、放置一些与UI相应的布局文件,都是xml 文件res/layout 11、在XML布局 7、跳转到另一个Activity的方法是( ) A.runActivity() B.goActivity() C.startActivity() D.startActivityForIn() 8、用于进行文字显示的组件是( ) A.TextView B.Button C.EditText https://www.doczj.com/doc/be6067368.html,bel 9、下面退出Activity错误的方法是() A.finish() B.抛异常强制退出 《Android基础应用》 Android常用控件 ?本章任务 ?使用Android开发使用时间组件 ?使用Android开发使用进度条组件 ?使用Android开发创建底部选项卡 ?本章目标 ?了解Android的组件层次结构 ?掌握常用的日期时间类控件 ?掌握常用的几个容器组件 1.Android组件的层次结构 UI组件都是View的子类,View有很多子类,它们之间存在树状的继承关系View及其子类结构图 TextView及其子类结构图 ViewGroup及其子类结构图 其下的子类一般作为容器或布局来使用 FrameLayout及其子类结构图 其下的子类通常作为容器或布局来使用 2.时间控件 2.1日期时间选择器 DatePicker组件可用于输入日期,TimePicker组件可用来选择时间,只能输入小时和分,默认12小时制 DatePicker ●使用onDateChangedListener监听器来获取用户的日期选择 ●使用init对组件进行初始化 ●使用getYear,getMonth,getDayOfMonth方法获得用户选择的年,月,日 TimePicker ●使用onTimeChangedListener监听器获取用户的时间选择 ●使用setIs24HourView设置是否以24小时制显示 ●使用getCurrentHour获得当前的小时数 ●使用getCurrentMinute获得当前的分钟数 示例 示例的实现结果 2.2时钟组件 AnalogClock组件用来以表盘的方式显示当前时间,该表只有时针和分针,DigitClock组件以数字的方式显示当前时间可以显示时分秒,由于DigitClock继承TextView,可以使用TextView 的属性 示例 自定义Dialog; dialog = new Dialog(this); dialog.setContentView(https://www.doczj.com/doc/be6067368.html,yout.by_baseinfo); dialog.setTitle("dialog的title"); /* * 获取Dialog的窗口对象及参数对象以修改对话框的布局设置, 可以直接调用this.getWindow(),表示获得这个Activity的Window * 对象,这样这可以以同样的方式改变这个Activity的属性. * Activity不可见时getWindow()返回值为null; */ Window dialogWindow = dialog.getWindow(); // 对话框的布局设置参数; https://www.doczj.com/doc/be6067368.html,youtParams layoutParams = dialogWindow.getAttributes(); // 设置Window中的内容为左上对齐; dialogWindow.setGravity(Gravity.LEFT | Gravity.TOP); /* * lp.x与lp.y表示相对于原始位置的偏移. * 当参数值包含Gravity.LEFT时,对话框出现在左边,所以lp.x就表示相对左边的偏移,负值忽略. * 当参数值包含Gravity.RIGHT时,对话框出现在右边,所以lp.x就表示相对右边的偏移,负值忽略. * 当参数值包含Gravity.TOP时,对话框出现在上边,所以lp.y就表示相对上边的偏移,负值忽略. * 当参数值包含Gravity.BOTTOM时,对话框出现在下边,所以lp.y就表示相对下边的偏移,负值忽略. * 当参数值包含Gravity.CENTER_HORIZONTAL时 * ,对话框水平居中,所以lp.x就表示在水平居中的位置移动lp.x像素,正值向右移动,负值向左移动. * 当参数值包含Gravity.CENTER_VERTICAL时 * ,对话框垂直居中,所以lp.y就表示在垂直居中的位置移动lp.y像素,正值向右移动,负值向左移动. * gravity的默认值为Gravity.CENTER,即Gravity.CENTER_HORIZONTAL | * Gravity.CENTER_VERTICAL. * * 本来setGravity的参数值为Gravity.LEFT | Gravity.TOP时对话框应出现在程序的左上角,但在 * 我手机上测试时发现距左边与上边都有一小段距离,而且垂直坐标把程序标题栏也计算在内了, Gravity.LEFT, Gravity.TOP, * Gravity.BOTTOM与Gravity.RIGHT都是如此,据边界有一小段距离 */ // 相对于屏幕原位置(加上标题栏) 的偏移量; lp.x = 100; // 新位置X坐标 Android应用开发试题 一、选择题(每题2分,共30分) 1. 下列不是手机操作系统的是?(D) A.Android B. Window Mobile C. Apple IPhone IOS D.windows vista 2.Android的VM虚拟机是哪个?A A.Dalvik B.JVM C.KVM D.framework 3. AndroidVM虚拟机中运行的文件的后缀名为(B) A.class B.apk C.dex D.xml 4. 下面关于Android DVM的进程和Liunx的进程,应用程序的进程说法正确的是 A.DVM指dalivk的虚拟机.每一个Android应用程序都在自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例,而每一个DVM都是在Liunx中的一个进程,所以说可以认为是同一个概念。B B.DVM指dalivk的虚拟机.每一个Android应用程序都在自己的进程中运行,不一定拥有一个独立的Dalvik虚拟机实例,而每一个DVM不一定都是在Liunx 中的一个进程,所以说可以认为不是一个概念。 C.DVM指dalivk的虚拟机.每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,而每一个DVM不一定都是在Liunx中的一个进程,所以说可以认为不是同一个概念。 D.DVM指dalivk的虚拟机.每一个Android应用程序都在自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例,而每一个DVM都是在Liunx中的一个进程,所以说可以认为是同一个概念。 5. 下列哪个可做EditText编辑框的提示信息?(D) A. android:inputType B. android:text C. android:digits D. android:hint 6. 在AndroidManifes.xml中描述一个Activity时,该Activity的label属性是指定什么( B) A.指定Activity的图标 B.指定Activity的显示图标 C.指定Activity和类相关联的类名 D.指定该Activity的唯一标识 7. 关于ContentValues类说法正确的是( A ) A.它和Hashtable比较类似,也是负责存储一些名值对,但是它存储的名值对当中的名是String类型,而值都是基本类型。 B.它和Hashtable比较类似,也是负责存储一些名值对,但是它存储的名值对当中的名是任意类型,而值都是基本类型。 C.它和Hashtable比较类似,也是负责存储一些名值对,但是它存储的名值对当中的名可以使空,而值都是String类型。 D.它和Hashtable比较类似,也是负责存储一些名值对,但是它存储的名值对当中的名是String类型,而值也是String类型。 8. Activity对一些资源以及状态的操作保存,最好是保存在生命周期的哪个函数中进行( A) A.onPause() B.onCreate() C.onResume() D.onStart 9. 下列哪个不是Activity的生命周期方法之一?(B) A. onCreate B. startActivity C. onStart D. onResume 10.如果在android应用程序中需要发送短信,那么需要在AndroidManifest.xml文件中增加什么样的权限( D). A.发送短信,无需配置权限 1.在android程序中,Log.d()用于输出什么级别的日志信息?(A) A、调试 B、信息 C、警告 D、错误 2.以下情况不会创建Context对象的是(C) A.创建Application 对象时 B.创建Service对象时 C.创建ContentProvider对象时 D.创建Activity对象时 3.下列不属于Android中广播中的类别的是(D) A.Normal Broadcas B.Sticky Broadcast C.Local Broadcast D.Order broadcast 4.以下哪个不是Intent的Activity启动方式(A) A.FLAG_ACTIVITY_BROUGHT_TO_FIRST B.FLAG_ACTIVITY_CLEAR_TOP C.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET D.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS 5.安卓AndroidManifest.xml文件的子节点不包括(C) A.application B.services C.permission D.provider 6.下面那个不是Fragment的生命周期方法(D) A. onStart B. onAttach C. onDestoryView D. onRestart 7.下面那种不是安卓原生支持的Menu(A) A.Selected Menu B.Option Menu C.Submenu D.Context Menu 8.下面不属于android的动画分类的有(D) A、Tween B、Frame C、Property D、Animation 9.下列哪个不是安卓service自带的方法(A) A.OnResume B.onCreate C.onStartCommand D.onRebind 10.下列属于SAX解析xml文件的优点的是(B) A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能 B、不用事先调入整个文档,占用资源少 C、整个文档调入内存,浪费时间和空间 D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会消失 11.下列关于Soundpool和MediaPlayer的说法,错误的是(A) A.MediaPlayer支持多个音乐同时播放 B.MediaPlayer资源占用率高 C.MediaPlayer延迟时间较长 D.new MediaPlayer()后要调用prepare()方法才能播放 12.关于res/raw目录说法正确的是(A) A、这里的文件是原封不动的存储到设备上不会转换为二进制的格式 android常用控件大全 在Android中使用各种控件(View) DatePicker-日期选择控件 TimePicker-时间选择控件 ToggleButton-双状态按钮控件 EditText-可编辑文本控件 ProgressBar-进度条控件 SeekBar-可拖动的进度条控件 AutoCompleteTextView-支持自动完成功能的可编辑文本控件 MultiAutoCompleteTextView-支持自动完成功能的可编辑文本控件,允许输入多值(多值之间会自动地用指定的分隔符分开) ZoomControls-放大/缩小按钮控件 Include-整合控件 VideoView-视频播放控件 WebView-浏览器控件 RatingBar-评分控件 Tab-选项卡控件 Spinner-下拉框控件 Chronometer-计时器控件 ScrollView-滚动条控件 在Android中使用的Layout FrameLayout:里面只可以有一个控件,并且不能设计这个控件的位置,控件会放到左上角 LinearLayout:里面可以放多个控件,但是一行只能放一个控件 TableLayout:这个要和TableRow配合使用,很像html里面的table AbsoluteLayout:里面可以放多个控件,并且可以自己定义控件的x,y的位置 RelativeLayout:里面可以放多个控件,不过控件的位置都是相对位置 (Android界面布局好像还可以直接引用一些view,如ScrollView等) 常用控件: 1,EditText 主要函数:setText/getText设置/获取文本内容,setHint设置缺省显示内容; 2,RadioGroup,RadioButton RadioButton的isChecked()判断是否被选中 获取选中RadioButon的ID:设置 RadioGroup.setOnCheckedChangeListener方法 publiconCheckedChanged(RadioGroupgroup,intcheckedId)//checkedId 是选中RadioButton的ID 3,CheckBox isChecked()判断是否被选中 setOnCheckedChangeListener方法监视选中状态改变情况 4,Spinner a,显示数据 1),硬编码加载 通过setAdapter方法设置类型为 ArrayAdapter(Contextcontext,inttextViewResId,String[]objects) textViewResourceId:显示内容的ViewID默认设置为 https://www.doczj.com/doc/be6067368.html,yout.simple_spinner_item 今天和大家分享下组合控件的使用。很多时候android自定义控件并不能满足需求,如何做呢?很多方法,可以自己绘制一个,可以通过继承基础控件来重写某些环节,当然也可以将控件组合成一个新控件,这也是最方便的一个方法。今天就来介绍下如何使用组合控件,将通过两个实例来介绍。 第一个实现一个带图片和文字的按钮,如图所示: 整个过程可以分四步走。第一步,定义一个layout,实现按钮内部的布局。代码如下: 1. 2.用 Eclipse 开发 Android 应用程序
Android界面开发之常用系统控件界面大合集
android 自定义控件的过程
Android应用开发基础习题
Android开发日志—常用控件篇(android简介和容器控件)
Android进阶——自定义View之自己绘制彩虹圆环调色板
android程序设计
Android常用控件
android自定义布局或View
Android应用开发试题
Android程序设计练习卷答案
android常用控件大全
Android自定义控件