android布局(2)

1、一个元素XML元素的名字对应到一个Java类,因此一个<TextView>元素在你的UI中创建一个TextView,一个<linearLayout>元素
创建一个LinearLayout的视图组。当你加载一个布局资源时,Android系统初始化这些运行时对象,对应你的布局中的元素。XML
元素的属性对应到一个Java类的方法。

2、ID属性

每个View对象都有一个关联的ID,来唯一标识它。当应用程序被编译时,这个ID作为一个整数引用。但是ID通常是在布局XML文
件中作为字符串分配的,作为元素的id属性。这个XML属性对所有的View对象可用且会经常用到。XML中的ID语法如下:

android:id="@+id/my_button"

字符串前的@符号表示XML解析器应该解析和扩展剩下的ID字符串,并把它作为ID资源。+符号表示这是一个新的资源名字,它必须
被创建且加入到我们的资源(R.java文件,R是Resource)。Android框架提供一些其他的ID资源。当引用一个 Android资源ID时,
你不需要+符号,但是你必须添加android包名字空间,如下:

android:id="@android:id/empty"

为了创建视图和从应用程序引用他们,通常的模式是:

首先在布局文件中定义一个视图/构件对象并分配一个唯一的ID:
<Button android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
然后创建一个视图对象实例并从布局中获取它(典型的是在onCreate()方法中):
Button myButton = (Button) findViewById(R.id.my_button);

3、布局参数

名为layout_something的XML布局属性,为视图定义适合于它所驻留的ViewGroup的布局参数。每个ViewGroup类实现一个扩展自
ViewGroup.LayoutParams的嵌套类。这个子类包含为每个子视图定义大小和位置的属性类型,以适合于该视图组。如下图所示,
父视图组为每个子视图定义布局参数(包括子视图组)。

注意每个LayoutParams子类有它自己的设置值的语法。每个子元素必须定义适合于它父视图的LayoutParams,虽然它可能也为自己
的子视图定义不同LayoutParams。

所有的视图组包括宽带和高度(layout_width和layout_height),并且每个视图要求要定义它们。许多LayoutParams也包括可选的
边距和边界。你可以指定宽度和高度的具体值,虽然你可能并不想这样做。更多地你将告诉视图它的大小依据它内容要求或跟父视图
组所允许的一样大(分别用wrap_content和fill_parent值)。

4.布局位置&大小&补距&边距

视图的几何形状是一个矩形。视图的位置表示为一个left和top的坐标对,尺寸(dimensions)表示为宽度和高度。位置和尺寸的单位
是像素(pixel)。

可以通过调用getLeft()和getTop()检索视图的位置。前者返回视图矩形坐标的left或x,后者返回视图矩形坐标的right或y。这些方法
返回相对于与其父视图的相对位置,例如当getLeft()返回20,即认为视图到其直接父视图的左边距离为20像素。

此外,提供了一些额外的方法如getRight()和getButtom()避免不必要的计算。这些方法返回视图坐标的右边距和底边距。例如,调用
getRight()等同于下面的计算:getLeft()+getWidth()。

视图的大小(size)也表示为宽度和高度,但跟上面尺寸(dimensions)是区别的。上面的尺寸定义视图想在父视图中占多大,视图的
尺寸可以通过getMeasureWidth()和getMeasureHeight()获得。而视图的大小(size)则表示视图在屏幕上的实际大小,他们的值可以
跟视图尺寸的不一样,但也不是非得这样。视图的大小可以通过getWidth()和getHeight()获得。

为了估量视图的尺寸,必须考虑它的补距(padding,即视图内容与视图边框的距离)。补距以像素表示视图的left、top、right和
bottom部分的空白。补距可以用来按特定数量的像素偏移视图内容。例如,左补距是2将输出内容离左边框2像素。补距可以通过
setPadding(int, int, int, int)方法设置和通过getPaddingLeft()、getPaddingRight()、getPaddingTop()、getPaddingBottom()来查询
。虽然一个视图可以定义补距,但是它不支持边距(margins)。然而,视图组支持边距。

wrap_content与fill_parent的区别,其实区别从他们的单词组成就可以看出:wrap——包,包裹等而content——内容,则wrap_content表
示视图对象的高度/宽度正好包住内容;fill——填充等而parent——父,则fill_parent表示填满父视图。

NOTE:上述代码中布局位置&大小&补距的单位(如width="250dp")。单位可以为px、in、mm、pt、dp、sp。

px:pixels(像素)——对应屏幕上实际的像素
in:inches(英寸)——基于物理屏幕的大小
mm:millimeters(毫米)——基于物理屏幕的大小
pt:points(点)——英寸的1/72,基于基于物理屏幕的大小
dp:density-independent pixels(独立于密度的像素)——一个抽象的基于物理屏幕密度的单位。这些单位是相对于一个160dpi的屏幕
,所有一个dp是160dpi屏幕上的一个点。dp到px的转换比率根据屏幕密度改变,但不一定是成正比。
sp:scale-independent pixels(规模独立像素)——类似于dp单位,但是它也受用户字体大小设置的影响。当你指定字体大小时使用它,
因为他们将根据屏幕和用户设置调整。

时间: 2024-12-20 17:36:57

android布局(2)的相关文章

Android布局---相对布局

Android布局分为五大类:相对布局.线性布局.表格布局.帧布局.网格布局 相对布局 语法格式: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmls:tools=""http://schemas.android.com/tools android:layout_width=" " android:layout_height=&quo

android 布局之滑动探究 scrollTo 和 scrollBy 方法使用说明

涉及到滑动,就涉及到VIEW,大家都知道,android的UI界面都是由一个一个的View以及View的派生类组成,View作为基类,而常用的布局里面的各种布局就是它派生出来的ViewGroup的子类,ViewGroup作为各个组件的容器搭建了整体的UI.以下是android UI的结构示示意图: 查看源码 /** * Implement this to do your drawing. * * @param canvas the canvas on which the background w

Android布局优化

Android影响布局性能主要是Overdraw(过度绘制),表现在重叠不可见元素的重复绘制会产生额外的开销. Overdraw以颜色划分等级:蓝色:Overdraw1倍:绿色:Overdraw2倍:浅红:Overdraw3倍:暗红;Overdraw4倍以上(需要进行优化). Android布局优化解决措施: 1.合理选择控件 LinearLayout简单易用,效率高,但是使用范围有限. RelativeLayout较复杂,使用范围广,效率稍差. 2.去掉windows默认背景 去掉window

android布局相关

android 让一个控件按钮居于底部的几种方法:http://www.cnblogs.com/zdz8207/archive/2012/12/13/2816906.html android布局--Android fill_parent.wrap_content和match_parent的区别: http://www.cnblogs.com/nikyxxx/archive/2012/06/15/2551390.html android布局属性大全:http://www.cnblogs.com/L

Android布局像素单位

Android布局像素单位有dp.sp.px等三种.设置字体时使用sp,设置长度.高度等属性时可以使用dp或sp,px则表示屏幕实际的像素. dp.sp.px三者之间的区别:dp是与密度无关,sp除了与密度无关外,还与比例无关.在Android中规定以160dpi为基准,即如果每英寸屏幕密度为160,则dp.sp.px都是一样的,即1dp=1sp=1px. 屏幕尺寸:屏幕的对角线长度,单位是英寸,1英寸=2.54厘米. 屏幕分辨率:指横纵向上的像素点数,单位是px,1px=1个像素点,一般以纵向

Android 布局中的include标签使用

Android 布局中的include标签使用 最近在布局时,有好多页面都是有共同特点的,比如标题:一个同样的样式! 如下图所示: 如果给每个页面都单独的写一个标题的布局那就太麻烦了,如果能写一个标题布局,其它页面重用该多好! 这个时候,<include> 就隆重登场了! 写一个标题的布局 title.xml: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:an

android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V

今天在看布局文件的时候出现 android 布局页面文件出错故障排除Exception raised during rendering: java.lang.System.arraycopy([CI[CII)V 提醒,google后在网上说是因为sdk版本的问题. 解决方法: 修改选择不同的API就好了,降低版本即可

Android布局中 android:layout_gravity=&quot;bottom&quot;为何不起作用?

在android布局时我们有时会需要将位于LinearLayout布局中的控件放在布局底部,或者是同时想将几个控件底部对齐,此时我们自然会想到使用 android:layout_gravity="bottom" 将控件放在该线性布局底部,但是,但是这样是行不通的,这个问题今天也困扰了我很长时间,以为是自己其他地方布局搞错了或者其他地方搞错了才会出现这种情况,最后没办法查资料才发现以下规律: 在 LinearLayout布局时: 当总布局为水平布局时 即当 android:orienta

android 布局中 layout_gravity、gravity、orientation、layout_weight

线性布局中,有 4 个及其重要的参数,直接决定元素的布局和位置,这四个参数是 android:layout_gravity ( 是本元素相对于父元素的重力方向 ) android:gravity (是本元素所有子元素的重力方向) android:orientation (线性布局以列或行来显示内部子元素) android:layout_weight (线性布局内子元素对未占用空间[水平或垂直]分配权重值,其值越小,权重越大. 前提是子元素 设置了 android:layout_width = "

Android布局文件经验

1.父控件中含有多个子控件时,往往遵循长子优先的原则,即长子如果很大可能占满父空间,使次子们出局: 2.假设TableLayout有2行,其中一行未设定列间长度比例,而另一行设定了,则未设定行可能也会遵循设定行的列间长度比例: 3.在某个区域(如TableLayout中某个单元格)显示某张超大的图片,希望图片总是自适应单元格而不是把单元格撑爆.解决方案:将单元格放在LinearLayout中,给LinearLayout设置android:layout_width="wrap_content&qu