当前位置:文档之家› 爱华对view的理解之Android 相近且易混淆的13种属性

爱华对view的理解之Android 相近且易混淆的13种属性

爱华对view的理解之Android 相近且易混淆的13种属性
爱华对view的理解之Android 相近且易混淆的13种属性

Index

Index (1)

PaddingTop 与marginTop (1)

Layout_gravity 与gravity (1)

Android:gravity 与MarginRight...Bottom 的关系.. (9)

ListView.getCount()与ListView.getChildCount() (9)

pendingIntent 与Intent (10)

View/scrollbar:outsideInset outsideOverlay insideInset insideOverlay 四个属性 (10)

Android中getWidth和getMeasuredWidth的区别 (11)

getX getRawX的区别(解释的很清楚) (12)

PaddingTop 与marginTop

paddingTop: 在控件内部,与顶端距离

marginTop: 在控件外部,与父类控件距离多远

(如下图)

Layout_gravity 与gravity

android:Layout_gravity: 在控件自身内部,

android:gravity:在控件外部,与父类控件的关系

(如下图)

上面的都错了。正解如下:

android:Layout_gravity: 定义在Button的属性里,表示button在父视图里的位置android:gravity:定义在Button的属性里,表示button内部的视图Textview在button里的位置。定义在LinearLayout的属性里,表示LinearLayout内部的视图Button在其布局里的位置。

Layout_weight/Layout_gravity仅用于LinearLayout /TableLayout 布局里。。

xmlns:android="https://www.doczj.com/doc/6012394272.html,/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical"android:background="@color/gray">

android:layout_height="wrap_content"

android:layout_gravity="right"

android:gravity="right"android:background="@color/red">

android:layout_height="wrap_content"

android:layout_gravity="left"

android:gravity="right"

android:background="@color/lightgreen">

android:background="@color/lightgreen"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

结论:

1,gravity 仅对单件,对自身内部的物体局左居右,比如,对用在layout属性,那么它内部的button局右,如果用在button属性里,那么button内部的字体

Textview局右。

如:

android:layout_height="wrap_content"

android:layout_gravity="right"

android:gravity="right"android:background="@color/red">

图形如下:

android:layout_gravity="right",红色背景在外部的父类视图里局右。

android:gravity="right" button margin在红色背景内部局右

.

又如:

android:layout_height="wrap_content"

android:layout_gravity="left"

android:gravity="right"

android:background="@color/lightgreen">

android:layout_gravity="left",黄色背景在外部的父类视图里局左。

android:gravity="right" button margin在黄色背景内部局右

都是在 LinearLayout 里面定义的。

疑问:

有人会问,对于上面这个,我能不能在 button定义时,在button属性里加上

android:layout_gravity="right",而让button margin在黄色背景内部局右呢?这个必须button的父视图是root型,否则此方法无效。

这个有点复杂,因为这样你在父类里面有android:layout_gravity,在子类里面也有同样的android:layout_gravity,系统会不支持。

那怎么办呢?看下面这个,仅在子类里面有android:layout_gravity,父类是root,且啥gravity都没有。。。

xmlns:android="https://www.doczj.com/doc/6012394272.html,/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:background="@color/gray">

android:layout_gravity="right" 让1子类在root型父视图里面局右了。。android:layout_gravity="left" 让2子类在root型父视图里面局左了。

P.S. root型父视图LinearLayout的orientation 必须是 vertical,如果是horziontal, 则如下:

即使是root型父视图linearLayout, 也没有用。

如果父视图不是root类,就出现问题了。。android:layout_gravity在子视图无效。

2,

3,若LinearLayout 父视图不是root,则次一级子视图出现顺序默认是从左到右。如果想实现下图,需

在这个非root类的父视图里,加入

android:gravity=”right”,这样LinearLayout下的

视图会默认从右向左了。。

4,

5,如何实现3 个Button 并排呢

若用非root型的LinearLayout做父视图,

xmlns:android="https://www.doczj.com/doc/6012394272.html,/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:background="@color/gray">

结果如图:

从左往右排列,最后一个button 不靠右了。。

若用RelativeLayout,

android:background="@color/lightgreen"

android:layout_width="wrap_content"

android:layout_height="wrap_content">

对于4个button, Relativelayout 会很吃紧。

那LinearLayout 呢,

我们发现,

1,LinearLayout 父类若是root类,则次一级子类中

属性写android:layout_gravity是有效的;若不是

root类,则失效。

2,若LinearLayout 父类不是root类,则次一级子视

图出现顺序默认是从左到右。如果想实现下图,需

在这个非root类的父视图里,加入

android:gravity=”right”,这样LinearLayout下的

视图会默认从右向左了。。

如何在LinearLayout里面实现下图呢?

(每个button的宽度设为死值:横向:120px)

(每个button的宽度设为死值:纵向:80px)

如果很想实现在LinearLayout里面,一个靠左,一个靠右的效果呢?

用权术,党同伐异,排除异己:

给第一个按钮设个100的权重,把第二个远远死死挤在右边上。。

实例运用:右边箭头必须在右边,左边radiobutton必须在左边,就是用权术。

Android:gravity 与MarginRight…Bottom 的关系

在LinearLayout 里面,

如果父视图android:gravity=Left, 证明从左向右,则

Android:layout_MarginLeft 有用

Android:layout_MarginTop 有用, 其余两个无用;

如果父视图android:gravity=Right, 证明从右向左,则

Android:layout_MarginRight 有用

Android:layout_MarginTop 有用

Android:layout_MarginBottom 有用, 其余1个无用;

ListView.getCount()与ListView.getChildCount()

ListView.getCount()(实际上是AdapterView.getCount())

返回的是其Adapter.getCount() 返回的值。也就是“所包含的Item 总个数”。

ListView.getChildCount()(ViewGroup.getChildCount)返回的是显示层面(当前视图可见面)上的“所包含的子View 个数”。

二者有什么不同?当ListView 中的Item 比较少无需滚动即可全部显示时,二者是等价的;当Item 个数较多需要滚动才能浏览全部的话, getChildCount() < getCount() 其中getChildCount() 返回的是当前可见的Item 个数。

其实Android framework 的这一设计并不难理解:当一些Item 当前不显示的时候为什么还要保留它们的View 呢?移动设备的资源有限,“能省则省”嘛。

pendingIntent 与Intent

PendingIntent和Intent的区别:An Intent is something that is used right now;

a PendingIntent is something that may create an Intent in the future. You will use a PendingIntent with Notifications, AlarmManager, etc.

PendingIntent 多用于Notification

View/scrollbar:outsideInset outsideOverlay insideInset insideOverlay 四个属性

Api 文档比较

Glossary : inset嵌入overlap重叠Translucency(半透明物)

Android中getWidth和getMeasuredWidth的区别

今天看SDK, 看到这个东西不是很懂, google了一会有些许收获. 以下是我的理解. getWidth得到是某个view的实际尺寸.

getMeasuredWidth是得到某view想要在parent view里面占的大小.

那用法呢?

getWidth在OnCreat的时候得到的是0..很奇怪, 我找到了原因: 当一个view对象创建时,android并不知道其大小,所以getWidth()和getHeight()返回的结果是0,真正大小是在计算布局时才会计算,所以会发现一个有趣的事,即在onDraw( ) 却能取得长宽的原因。那怎么在onCreat 的时候得到呢?

width = activity.getWindowManager().getDefaultDisplay().getWidth();

height = activity.getWindowManager().getDefaultDisplay().getHeight();

2. getMeasuredWidth必须在parent view或者它自己调用measure()函数之后才能得到. measure函数就是计算该函数需要占用的空间大小.

getX getRawX的区别(解释的很清楚)

getX是获取以widget左上角为坐标原点计算的X轴坐标直.

getRawX 获取的是以屏幕左上角为坐标原点计算的X轴坐标直.

总结:

如果你的某个Activity中实现OnTouchListener接口,需要重写onTouch(View view,MotionEvent event)这个方法,getRawX()和getRawY()获得的是相对屏幕的位置,getX()和getY()获得的永远是相对view的触摸位置坐标(这两个值不会超过view的长度和宽度)。

RawX,RawY 相对于屏幕位置坐标, 具体见图,从标题栏的顶角起算。

X,Y 相对于容器的位置坐标

android 自定义圆角头像以及使用declare-styleable进行配置属性解析

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系统架构详解

Android系统架构详解 Android系统架构由5部分组成, 分别是:Linux Kernel、Android Runtime、Libraries、Application Framework、Applications。 1、Linux Kernel Android relies on Linux version 2.6 for core system services such as security, memory management, process management, network stack, and driver model. The kernel also acts as an abstraction layer between the hardware and the rest of the software stack. Android基于Linux 2.6提供核心系统服务,例如:安全、内存管理、进程管理、网络堆栈、驱动模型。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏具体硬件细节而为上层提供统一的服务。如果你学过计算机网络知道OSI/RM,就会知道分层的好处就是使用下层提供的服务而为上层提供统一的服务,屏蔽本层及以下层的差异,当本层及以下层发生了变化不会影响到上层。也就是说各层各尽其职,各层提供固定的SAP(Service Access Point),专业点可以说是高内聚、低耦合。如果你只是做应用开发,就不需要深入了解Linux Kernel层。 2、Android Runtime Android includes a set of core libraries that provides most of the functionality available in the core libraries of the Java programming language. Android包括一个核心库的集合,她们提供了Java编程语言的核心库中的绝大多数功能。 Every Android application runs in its own process, with its own instance of the Dalvik virtual

Android布局属性大全

Android布局属性大全 布局: AbsoluteLayout(绝对布局): xmlns:android="https://www.doczj.com/doc/6012394272.html,/apk/res/android" style="@..." android:clipChildren="true|false" android:clipToPadding="true|false" android:layoutAnimation="@---" android:animationCache="true|false" android:persistentDrawingCache="none|animation|scrolling|all":持续高速缓存绘图 android:alwaysDrawnWithCache="true|false" android:andStatesFromChildre="true|false" android:descendantFocusability="beforeDescendants|afterDescendants|bl ocksDescendants":后裔可聚焦 android:id="@+id/absoluteLayout" android:tag="@---" android:android:scrollX="---" android:android:scrollY="---" android:background="@---" android:padding="----" android:paddingLeft="----" android:paddingTop="----" android:paddingRight="----" android:paddingBotton="---" android:focusable="true|false" android:focusableInTouchMode="true|false" android:visibility="visible|invisible|gone" android:fitsSystemWindows="true|false":适合系统窗口 android:scrollbars="none|horizontal|vertical" android:scrollbarStyle="insideOverlay(内覆盖)|insideInset(内插 图)|outsideOverlay(外覆盖)|outsideInset(外插图)" android:isScrollContainer="true|false":是一个滚动集合 android:fadeScrollbars="true|false":褪色的滚动条 android:scrollbarFadeDuration="---":卷轴淡出 android:scrollDefaultDelayBeforeFade="---":滚动前默认延迟 android:scrollbarSize="---" android:scrollbarThumbHorizontal="@----":拇指水平滚动条 android:scrollbarThumbVertical="@----":拇指垂直滚动条 android:scrollbarTrackVertical="@---":垂直滚动条轨道 android:scrollbarTrackHorizontal="@---":水平滚动条轨道 android:scrollbarAlwaysDrawHorizontalTrack="true|false":水平滚动条总是吸引轨道

Android平台我的日记设计文档

Android平台我的日记 设计文档 项目名称:mydiray 项目结构示意: 阶段任务名称(一)布局的设计 开始时间: 结束时间: 设计者: 梁凌旭 一、本次任务完成的功能 1、各控件的显示 二、最终功能及效果 三、涉及知识点介绍 四、代码设计 activity_main.xml:

android:layout_centerHorizontal="true" android:layout_marginTop="88dp" android:text="@string/wo" android:textSize="35sp"/>

相关文档 最新文档