首页 > 技术文章 > Android知识补充(Android学习笔记)

ArrozZhu 2018-01-30 11:22 原文

Android知识补充

●国际化

所谓的国际化,就是指软件在开发时就应该具备支持多种语言和地区的功能,也就是说开发的软件能同时应对不同国家和地区的用户访问,并针对不同国家和地区的用户,提供相应的、符合来访者阅读习惯的页面或数据。

由于国际化Internationalization这个单词的首字母"I"和尾字母"N"之间有18个字符,因此国际化被简称为I18N

由于Android采用XML文件来管理资源文件,因此Android程序国际化只需要为资源文件提供不同语言国家对应的内容即可。开发者只需要在res目录下新建几个values文件夹即可。需要注意的是,新建的values文件是有命名规则的,具体如下所示:

values-语言代码-r国家代码

 

 

  

需要注意的是,在匹配资源时先会找语言、地区完全匹配的。如果没有地区匹配的,则查找语言匹配的。

然后创建一个I18N的程序,创建两个资源文件夹,分别命名为"values-zh-rCN"、"values-en-rUS"并将values文件夹下的strings.xml文件复制到这个文件夹下。 "values-zh-rCN"文件夹下的strings.xml文件如下所示:

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

<resources>

<string name="app_name">国际化</string>

<string name="menu_settings">设置</string>

<string name="hello_world">你好,世界!</string>

</resources>

运行程序,打开系统设置(setting菜单)找到【language&inputàlanguageàà【简体中文】,设置好语言之后,重新进入程序能可以看到如下界面。

  

 

Android下的junit调试

常见测试分类
在介绍Android Junit前先介绍一下常见的测试分类。
根据是否知道源程序源码:
    黑盒测试:不知源码,只是测试程序的功能
    白盒测试:知道源码,根据源代码进行测试
根据测试的粒度:(模块的大小)
    单元测试: unit test
    功能测试: function test:方法测试
    整合测试: integration test:几个模块的测试,服务器/客户端的联调
    系统测试: system test
根据测试的次数:
    冒烟测试(暴力测试): smoke test,不停的执行操作,直到系统崩溃
        Google提供了一个monkey
        Adb shell
:进入模拟器目录, monkey
        2000
,通过monkey是随机点击2000
        monkey –p 包名 次数:只测试某个应用程序
    压力测试:不是在常规条件下运行手动或自动测试,而是在计算机数量较少或系统资源匮乏的条件下运行测试。通常要进行软件压力测试的资源包括内部内存、CPU 可用性、磁盘空间和网络带宽。

JUnit是一个Java语言的单元测试框架,通过它我们不需要把程序安装到手机或模拟器中进行测试,这样会大大提高程序开发的准确性。

 

JUnit单元测试既可以嵌入到项目中,也可以作为一个单独的项目,针对某个项目进行测试。

  1. 创建一个junit项目。

     

  2. AndroidManifest.xml文件中添加一些调试指令代码

    <instrumentation

    android:name="android.test.InstrumentationTestRunner"

    android:targetPackage="com.example.junit" />

    <uses-library android:name="android.test.runner" />

    如图

     

  3. 在该项目下创建com.example.junit.service包,在里面添加一个java文件如图

  4. 然后再该项目下添加com.example.junit.test包,里面创建一个测试文件TestCalcService.java如图:

  5. 接下来,找到outline窗口,如图所示,右键红色圈里面的add方法run asAndroid-junit-test

  6. 如果测试成功,就会显示如图所示的绿色, 否则为红色。

 

●有关SQLite3

SQLite3是就是SQLite的版本之意,之前还有SQLite2等版本。

Android系统自带SQLite,如果要在Windows系统上使用SQLite,可下载:sqlite-shell-win32-x86-3070701.zip

我们这里下载的是命令行版本,所以是一个可执行文件,还有一个动态链接库版本,如果你的应用程序需要嵌入式数据库,可以下载这个版本。当然,如果你愿意折腾,下载源代码自己编译也是可以的。

下载完成,解压出来就一个文件:sqlite3.exe,可以放置到任意一个路径下,然后把这个路径加入到PATH环境变量中,这样我们就可以随时在控制台中运行SQLite命令行工具了。

另外,专门的SQLite数据库管理工具较多,如SQLite expert(可避免文字乱码的问题),sqlitestudio(绿色单文件,体积小,功能强大)。

※设置主键(primary), 那一个column里不能有任何重复的字段.

具体SQLite操作详见:

http://blog.csdn.net/xing_hao/article/details/6660589

http://blog.csdn.net/witsmakemen/article/details/19826961

SQLite的.db文件的基本结构:

数据库名main代表主数据库(还可能有一个temp代表存放临时表的数据库)

 

我们看到main数据库下有两个表main和t_words

android_metada表只包含一个字段locale[ləʊ`kɑ:l],记录语言和地域信息,虽然简单但是必不可少。如果发现其被不小心删除,可以手工创建一个android_metadata

SQL语句如下:

createtable android_metadata(locale text);

insertinto android_metadata(locale) values("zh_CN");

 

t_words是我们自己创建的表

 

●创建表与删除表

 

 

 

●创建表与删除表

创建表:

例如,要创建一个名为userInfo_brief的表,需要的SQL语句为:

CREATE TABLE userInfo_brief (

id INTEGER PRIMARY KEY AUTOINCREMENT,

name TEXT,

password TEXT);

 

对应的Java代码如下:

String TABLENAME_1="userInfo_brief";

String ID="id";

String NAME="name";

String PASSWORD="password";

String sql="CREATE TABLE"+

            TABLENAME_1+"("+

            ID+"INTEGER PRIMARY KEY AUTOINCREMENT,"+

            NAME+" TEXT,"+

            PASSWORD+" TEXT);";

            db.execSQL(sql);

//表中有三列

//第一列是id, 之后3个修饰符的意义是: 整数型、主键、自动增长

//第二列是name, 类型为TEXT

//第三列是password, 类型为TEXT

//TEXT前面要有一个空

删除表:

相应的,如果要删除表userInfo_brief ,其SQL语句为:

DROP TABLE userInfo_brief;

与其对应的Java代码为:

Sring sql = "DROP TABLE "+ TABLENAME_1 + ";";

db.execSQL(sql)

 

 

Cursor

Cursor,翻译叫做游标。

其实就是指向某一条的意思。

一般在SQL查询中使用

比如你在查询一张表格,而cursor会像手指一样,从第一条开始指向最后一条,这在java中就可以写成一个for循环,然后取出每一条的数据,放入list中,表中的数据就全部拿到了。

 

MODE_PRIVATE

MODE_PRIVATE:为默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容,如果想把新写入的内容追加到原文件中。可以使用Context.MODE_APPEND

 

●对象序列化

序列化是将对象状态转换为可保存或传输的格式的过程,这种格式有Json格式、XML格式、二进制格式、SOAP格式。

而反序列化通常是将这种格式转换为原来的对象的过程。

XML很好很强大,但是最近有另外一个时代弄潮儿,这就是JSON(JavaScript Object Notation.)。

现在JSON的光环已经逐渐超越了XML,各大网站提供的数据接口一般都是JSON

"传智"上的序列化有些过时,

 

The distinction between disassembling and decompiling is that disassembling the binary code will give you the assembly equivalent. Decompiling on the other hand implies the process of converting the raw assembly code into a higher level language (in this case C).

 

.\

Android中,.\后接项目名

 

Ctrl + /--〉去掉注释行

Ctrl +D -->删除注释行

 

●一个try块后有两个catch块,

一个try块后有两个catch块,这很正常,因为,在try块中包含众多语句,可能抛出多种不同的异常,只有通过多个catch块来捕获不同的异常。而如果两个异常存在继承关系,应该把子类异常放在你类异常的前面来捕获.

 

@param

注解,@param是参数的解释。如

/**

*@param s 这里表示对s的文字说明,描述

 

*/

 

public void aa(String s){}

一般java@表示注解,解释一个方法,类,属性的作用

 

Android@SuppressLint("InlinedApi")中InlinedApi是什么意思?

@SuppressLint标注忽略指定的警告 "InlinedApi": Finds inlined fields that may or may not work on older platforms 可以不用理。

Handler在Android中用于消息的发送与异步处理,常常在Activity中作为一个匿名内部类来定义,此时Handler会隐式地持有一个外部类对象(通常是一个Activity)的引用。当Activity已经被用户关闭时,由于Handler持有Activity的引用造成Activity无法被GC回收,这样容易造成内存泄露。

正确的做法是将其定义成一个静态内部类(此时不会持有外部类对象的引用),在构造方法中传入Activity并对Activity对象增加一个弱引用,这样Activity被用户关闭之后,即便异步消息还未处理完毕,Activity也能够被GC回收,从而避免了内存泄露。

 

●关于/mnt/sdcardsdcard的区别,可以这样理解:

其实,安卓系统是从Linux而衍生出来的,而mntunix/Linux传统系统下挂载外部设备的专用目录,Linux默认挂载外部设备都会挂到这个目录下面去,如将sd卡挂载上去后,会生成一个/mnt/sdcard 目录。

/sdcard 目录,这是一个软链接,一个映射,它相当于windows的文件夹的快捷方式,链接到/mnt/sdcard 目录,所以这个目录的内容就是sdcard的内容。

 

BinderIBinder

Binder是一个具体类,是IBinder的子类,具有其自己的功能,继承Binder可以使用Binder原有功能,只对你需要的方法做修改;IBinder是个接口,可以让你的类当作Binder来用,但是所有的具体功能都需要你自己编写逻辑。

 

Android常用属性

android:id --- 为控件指定相应的ID

android:text --- 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串

android:grivity --- 指定控件的基本位置,比如说居中,居右等位置,这里指的是控件中的文本位置并不是控件本身。

android:textSize --- 指定控件当中字体的大小

android:background --- 指定该控件所使用的背景色,RGB命名法

android:width --- 指定控件的宽度

android:height --- 指定控件的高度

android:padding --- 指定控件的内边距,也就是说控件当中的内容

android:sigleLine --- 如果设置为真的话,则控件的内容在同一行中进行显示

android:layout_marginBottom="@dimen/margin_superlarge",表示引用了一个大小,这个大小的值为margin_superlarge

@dimen 是用于定义控件尺寸的属性。例如:<dimen name="margin_superlarge">10dp</dimen>

LinearLayout:

android:id 为控件指定相应的ID

android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符

android:grivity 指定控件的基本位置,比如说居中,居右等位置

android:textSize 指定控件当中字体的大小

android:background 指定该控件所使用的背景色,RGB命名法

android:width 指定控件的宽度

android:height 指定控件的高度

android:padding 指定控件的内边距,也就是说控件当中的内容

android:sigleLine 如果设置为真的话,则将控件的内容在同一行当中进行显示

 

 

RelativeLayout

android:layout_above 将该控件的底部至于给定ID的控件之上

android:layout_below 将该控件的顶部至于给定ID的控件之下

android:layout_toLeftOf 将该控件的右边缘和给定ID的控件的左边缘对齐

android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐

 

android:layout_alignBaseline 该控件的baseline和给定ID的控件的baseline对齐

android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘

android:layout_alignLeft 将该控件的左边缘与给定ID控件的左边缘对齐

android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐

android:layout_alignTop 将给定控件的顶部边缘与给定ID控件的顶部对齐

 

android:alignParentBottom 如果该值为true,则将该控件的底部和父控件的底部对齐

android:layout_alignParentLeft 如果该值为true,则将该控件的左边与父控件的左边对齐

android:layout_alignParentRight 如果该值为true,则将该控件的右边与父控件的右边对齐

android:layout_alignParentTop 如果该值为true,则将空间的顶部与父控件的顶齐

android:layout_centerHorizontal 如果值为真,该控件将被至于水平方向的中央

android:layout_centerInParent 如果值为真,该控件将被至于父控件水平方向和垂直方向的中央

android:layout_centerVertical 如果值为真,该控件将被至于垂直方向的中央

 

android:paddingandroid:margin的区别

Android的MarginPaddingHtml的是一样的。如下图所示:黄色部分为Padding,灰色部分为Margin

通俗的理解:

Padding 为内边框,指该控件内部内容,如文本/图片距离该控件的边距

Margin 为外边框,指该控件距离边父控件的边距

 

layout_centerInParent="true"

居中显示,将这个控件显示在父窗口的中间位置.

 

Android布局-- fill_parentwrap_contentmatch_parent的区别

wrap_content:表示控件的大小 刚好 足够显示当前控件里的内容:

fill_parent和match_parent

设置布局/控件为fill_parent: 让布局/控件布满整个屏幕或填满父控件的空白

Androidfill_parentmatch_parent(从Android2.2开始)是一样的。

为了兼容低版本,建议使用fill_parent

 

tools:context=".activity name"

tools:context=".activity name"这一句不会被打包进APK

 

只是ADTLayout Editor在你当前的Layout文件里面设置对应的渲染上下文,

 

说明你当前的Layout所在的渲染上下文是activity name对应的那个activity

 

如果这个activitymanifest文件中设置了Theme

 

那么ADTLayout Editor会根据这个Theme来渲染你当前的Layout

 

就是说如果你设置的MainActivity设置了一个Theme.Light(其他的也可以),

 

那么你在可视化布局管理器里面看到的背景阿控件阿什么的就应该是Theme.Light的样子。

 

仅用于给你看所见即所得的效果而已。

tools:context

这个属性通常在一个布局XML文件的根元素中设置,记录了这个布局关联到哪一个activity(因为显然一个布局在设计时可以被多个布局使用)(例如它会用于布局编辑器中以推断默认的主题,由于主题定义在Manifest中,并与activity而不是布局相关联。你可以和在manifests中一样使用点前缀,来指定activity类,而不需要使用完整的程序包名作为前缀。

tools:context 就是将这个 layout 文件和后面的 Activity 进行关联,这样编辑器在展示布局效果的时候,就能针对 Activity 的一些属性进行有针对性的处理。

 

 

android屏幕自适应 android 属性

一般为不同分辨率准备不同的图片就可以了,因为图片如果缩放的话效果不好。

不用准备多个layout xml文件

 

 

当然layout.xml文件中的高度与宽度设置不能写死的了~

 

layout_weight按比例分割屏幕

 

目前UC浏览器就是建了不同的layout,这是比较规范的做法

当然我们没有那么多精力,越简单越好,至于三个放图片的文件夹hdpi放的是高分辨率图片,另两个或说中等分辨率,分辨率再更低的图片吧,其实我感觉他们在开发的时候具体区分起来,还是不够实现屏幕的适配

所以楼主要善于应用Android的控件,控件的属性,比如layout_weight="1"就是强调该控件的强调度,在一个ViewGroup中的View如果都有该写法的属性,那么他们的位置均分屏幕的宽度,如果有个TextView一个ImageView,并想TextView放到屏幕的最右边,那么ImageView加了该属性,那么其右边的TextView中写上aandroid:gravity="right"属性,就自动摆在右边了

总上而言,应该多去研究下android控件,及其属性的作用,然后灵活应用才是正确之路

   

   

android属性

Android功能强大,界面华丽,但是众多的布局属性就害苦了开发者,下面这篇文章结合了网上不少资料,花费本人一个下午搞出来的,希望对其他人有用。

第一类:属性值为truefalse

android:layout_centerHrizontal 水平居中

android:layout_centerVertical 垂直居中

android:layout_centerInparent 相对于父元素完全居中

android:layout_alignParentBottom 贴紧父元素的下边缘

android:layout_alignParentLeft 贴紧父元素的左边缘

android:layout_alignParentRight 贴紧父元素的右边缘

android:layout_alignParentTop 贴紧父元素的上边缘

android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

第二类:属性值必须为id的引用名"@id/id-name"

android:layout_below 在某元素的下方

android:layout_above 在某元素的的上方

android:layout_toLeftOf 在某元素的左边

android:layout_toRightOf 在某元素的右边

android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐

android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐

android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐

android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

第三类:属性值为具体的像素值,如30dip40px

android:layout_marginBottom 离某元素底边缘的距离

android:layout_marginLeft 离某元素左边缘的距离

android:layout_marginRight 离某元素右边缘的距离

android:layout_marginTop 离某元素上边缘的距离

EditText的android:hint 设置EditText为空时输入框内的提示信息。

android:gravity

android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text view的靠左,靠右等位置.以button为例,android:gravity="right"button上面的文字靠右

android:layout_gravity

android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity="right"button靠右

android:scaleType:

android:scaleType是控制图片如何resized/moved来匹对ImageViewsizeImageView.ScaleType / android:scaleType值的意义区别:

CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示

CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长()等于或大于View的长()

CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/

FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示

FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置

FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置

FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示

MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。

** 要注意一点,Drawable文件夹里面的图片命名是不能大写的。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

android:id

为控件指定相应的ID

android:text

指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串

android:gravity

指定View组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身

android:layout_gravity

指定Container组件的对齐方式.比如一个button linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity="right"button靠右

android:textSize

指定控件当中字体的大小

android:background

指定该控件所使用的背景色,RGB命名法

android:width

指定控件的宽度

android:height

指定控件的高度

android:layout_width

指定Container组件的宽度

android:layout_height

指定Container组件的高度

android:layout_weight

View中很重要的属性,按比例划分空间

android:padding*

指定控件的内边距,也就是说控件当中的内容

android:sigleLine

如果设置为真的话,则控件的内容在同一行中进行显示

android:scaleType

是控制图片如何resized/moved来匹对ImageViewsiz

android:layout_centerHrizontal

水平居中

android:layout_centerVertical

垂直居中

android:layout_centerInparent

相对于父元素完全居中

android:layout_alignParentBottom

贴紧父元素的下边缘

android:layout_alignParentLeft

贴紧父元素的左边缘

android:layout_alignParentRight

贴紧父元素的右边缘

android:layout_alignParentTop

贴紧父元素的上边缘

android:layout_alignWithParentIfMissing

如果对应的兄弟元素找不到的话就以父元素做参照物

android:layout_below

在某元素的下方

android:layout_above

在某元素的的上方

android:layout_toLeftOf

在某元素的左边

android:layout_toRightOf

在某元素的右边

android:layout_alignTop

本元素的上边缘和某元素的的上边缘对齐

android:layout_alignLeft

本元素的左边缘和某元素的的左边缘对齐

android:layout_alignBottom

本元素的下边缘和某元素的的下边缘对齐

android:layout_alignRight

本元素的右边缘和某元素的的右边缘对齐

android:layout_marginBottom

离某元素底边缘的距离

android:layout_marginLeft

离某元素左边缘的距离

android:layout_marginRight

离某元素右边缘的距离

android:layout_marginTop

离某元素上边缘的距离

android:paddingLeft

本元素内容离本元素右边缘的距离

android:paddingRight

本元素内容离本元素上边缘的距离

android:hint

设置EditText为空时输入框内的提示信息

android:LinearLayout

它确定了LinearLayout的方向,其值可以为vertical, 表示垂直布局horizontal, 表示水平布局

 

----------------------------------------------------

android:interpolator

可能有很多人不理解它的用法,文档里说的也不太清楚,其实很简单,看下面:interpolator定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用 Interpolator 控制。interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animationAndroid 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:

AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速

AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速

CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线

DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速

LinearInterpolator 在动画的以均匀的速率改变

对于 LinearInterpolator ,变化率是个常数,即 f (x) = x.

public float getInterpolation(float input) {

return input;

}

Interpolator其他的几个子类,也都是按照特定的算法,实现了对变化率。还可以定义自己的 Interpolator 子类,实现抛物线、自由落体等物理效果。

   

   

   

TextView属性汇总

android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)

android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。

android:bufferType指定getText()方式取得的文本类别。选项editable 类似于StringBuilder可追加字符,也就是说getText后可调用append方法设置文本内容。spannable 则可在给定的字符区域使用样式,参见这里1、这里2

android:capitalize设置英文字母大写类型。此处无效果,需要弹出输入法才能看得到,参见EditView此属性说明。

android:cursorVisible设定光标为显示/隐藏,默认显示。

android:digits设置允许输入哪些字符。如"1234567890.+-*/% ()"

android:drawableBottom在text的下方输出一个drawable,如图片。如果指定一个颜色的话会把text的背景设为该颜色,并且同时和background使用时覆盖后者。

android:drawableLeft在text的左边输出一个drawable,如图片。

android:drawablePadding设置textdrawable(图片)的间隔,与drawableLeftdrawableRightdrawableTopdrawableBottom一起使用,可设置为负数,单独使用没有效果。

android:drawableRight在text的右边输出一个drawable

android:drawableTop在text的正上方输出一个drawable

android:editable设置是否可编辑。

android:editorExtras设置文本的额外的输入数据。

android:ellipsize设置当文字过长时,该控件该如何显示。有如下值设置:"start"—-省略号显示在开头;"end" ——省略号显示在结尾;"middle"—-省略号显示在中间;"marquee" ——以跑马灯的方式显示(动画横向移动)

android:freezesText设置保存文本的内容以及光标的位置。

android:gravity设置文本位置,如设置成"center",文本将居中显示。

android:hintText为空时显示的文字提示信息,可通过textColorHint设置提示信息的颜色。此属性在 EditView中使用,但是这里也可以用。

android:imeOptions附加功能,设置右下角IME动作与编辑框相关的动作,如actionDone右下角将显示一个"完成",而不设置默认是一个回车符号。这个在EditView中再详细说明,此处无用。

android:imeActionId设置IME动作ID

android:imeActionLabel设置IME动作标签。

android:includeFontPadding设置文本是否包含顶部和底部额外空白,默认为true

android:inputMethod为文本指定输入法,需要完全限定名(完整的包名)。例如:com.google.android.inputmethod.pinyin,但是这里报错找不到。

android:inputType设置文本的类型,用于帮助输入法显示合适的键盘类型。在EditView中再详细说明,这里无效果。

android:linksClickable设置链接是否点击连接,即使设置了autoLink

android:marqueeRepeatLimit在ellipsize指定marquee的情况下,设置重复滚动的次数,当设置为 marquee_forever时表示无限次。

android:ems设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度

android:maxEms设置TextView的宽度为最长为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:minEms设置TextView的宽度为最短为N个字符的宽度。与ems同时使用时覆盖ems选项。

android:maxLength限制显示的文本长度,超出部分不显示。

android:lines设置文本的行数,设置两行就显示两行,即使第二行没有数据。

android:maxLines设置文本的最大显示行数,与width或者layout_width结合使用,超出部分自动换行,超出行数将不显示。

android:minLines设置文本的最小行数,与lines类似。

android:lineSpacingExtra设置行间距。

android:lineSpacingMultiplier设置行间距的倍数。如"1.2"

android:numeric如果被设置,该TextView有一个数字输入法。此处无用,设置后唯一效果是TextView有点击效果,此属性在EdtiView将详细说明。

android:password以小点"."显示文本

android:phoneNumber设置为电话号码的输入方式。

android:privateImeOptions设置输入法选项,此处无用,在EditText将进一步讨论。

android:scrollHorizontally设置文本超出TextView的宽度的情况下,是否出现横拉条。

android:selectAllOnFocus如果文本是可选择的,让他获取焦点而不是将光标移动为文本的开始位置或者末尾位置。 TextView中设置后无效果。

android:shadowColor指定文本阴影的颜色,需要与shadowRadius一起使用。

android:shadowDx设置阴影横向坐标开始位置。

android:shadowDy设置阴影纵向坐标开始位置。

android:shadowRadius设置阴影的半径。设置为0.1就变成字体的颜色了,一般设置为3.0的效果比较好。

android:singleLine设置单行显示。如果和layout_width一起使用,当文本不能全部显示时,后面用"…"来表示。如android:text="test_ singleLine "

android:singleLine="true" android:layout_width="20dp"将只显示"t…"。如果不设置singleLine或者设置为false,文本将自动换行

android:text设置显示文本.

android:textAppearance设置文字外。如 "?android:attr/textAppearanceLargeInverse"这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。可textAppearanceButton/textAppearanceInverse/textAppearanceLarge/textAppearanceLargeInverse/textAppearanceMedium/textAppearanceMediumInverse/textAppearanceSmall/textAppearanceSmallInverse

android:textColor设置文本颜色

android:textColorHighlight被选中文字的底色,默认为蓝色

android:textColorHint设置提示信息文字的颜色,默认为灰色。与hint一起使用。

android:textColorLink文字链接的颜色.

android:textScaleX设置文字之间间隔,默认为1.0f

android:textSize设置文字大小,推荐度量单位"sp",如"15sp"

android:textStyle设置字形[bold(粗体) 0, italic(斜体) 1, bolditalic(又粗又斜) 2] 可以设置一个或多个,用"|"隔开

android:typeface设置文本字体,必须是以下常量值之一:normal 0, sans 1, serif 2, monospace(等宽字体) 3]

android:height设置文本区域的高度,支持度量单位:px(像素)/dp/sp/in/mm(毫米)

android:maxHeight设置文本区域的最大高度

android:minHeight设置文本区域的最小高度

android:width设置文本区域的宽度,支持度量单位:px(像素)/dp/sp/in/mm(毫米),与layout_width 的区别看这里。

android:maxWidth设置文本区域的最大宽度

android:minWidth设置文本区域的最小宽度

   

Android activity属性汇总

android:allowTaskReparenting

是否允许activity更换从属的任务,比如从短信息任务切换到浏览器任务。

android:alwaysRetainTaskState

是否保留状态不变, 比如切换回home, 再从新打开, activity处于最后的状态

android:clearTaskOnLanunch

比如 P activity, Q 是被P 触发的 activity, 然后返回Home, 从新启动 P,是否显示 Q

android:configChanges

当配置list发生修改时,是否调用 onConfigurationChanged() 方法 比如 "locale|navigation|orientation".

android:enabled

activity 是否可以被实例化,

android:excludeFromRecents

是否可被显示在最近打开的activity列表里

android:exported

是否允许activity被其它程序调用

android:finishOnTaskLaunch

是否关闭已打开的activity当用户重新启动这个任务的时候

android.icon

android:label

android:launchMode

activity启动方式, "standard" "singleTop" "singleTask" "singleInstance"

其中前两个为一组, 后两个为一组

android:multiprocess

允许多进程

android:name

activity的类名, 必须指定

androidnHistory

是否需要移除这个activity当用户切换到其他屏幕时。这个属性是 API level 3 中引入的

android:permission

android:process

一 个activity运行时所在的进程名,所有程序组件运行在应用程序默认的进程中,这个进程名跟应用程序的包名一致。中的元素process属性能够为所有组件设定一个新的默认值。但是任何组件都可以覆盖这个默认值,允许你将你的程序放在多进程中运行。 如果这个属性被分配的名字以:开头,当这个activity运行时, 一个新的专属于这个程序的进程将会被创建。如果这个进程名以小写字母开头,这个activity将会运行在全局的进程中,被它的许可所提供。

android:screenOrientation

activity显示的模式, "unspecified" 默认值 "landscape" 风景画模式,宽度比高度大一些 "portrait" 肖像模式, 高度比宽度大。 "user" 用户的设置 "behind" "sensor" "nosensor"

android:stateNotNeeded

是否 activity被销毁和成功重启并不保存状态

android:taskAffinity

activity的亲属关系, 默认情况同一个应用程序下的activity有相同的关系

android:theme

activity的样式主题, 如果没有设置,则activity的主题样式从属于应用程序,参见元素的theme属性

android:windowSoftInputMode

activity主窗口与软键盘的交互模式, 自从API level 3 被引入

活动的主窗口如何与包含屏幕上的软键盘窗口交互。这个属性的设置将会影响两件事情:

1> 软键盘的状态——是否它是隐藏或显示——当活动(Activity)成为用户关注的焦点。

2> 活动的主窗口调整——是否减少活动主窗口大小以便腾出空间放软键盘或是否当活动窗口的部分被软键盘覆盖时它的内容的当前焦点是可见的。

它的设置必须是下面列表中的一个值,或一个"state…"值加一个"adjust…"值的组合。在任一组设置多个值——多个"state…"values,例如&mdash有未定义的结果。各个值之间用|分开。例如: <activity android:windowSoftInputMode="stateVisible|adjustResize" . . . >

在这设置的值("stateUnspecified""adjustUnspecified"以外)将覆盖在主题中设置的值

值 描述

"stateUnspecified" 软键盘的状态(是否它是隐藏或可见)没有被指定。系统将选择一个合适的状态或依赖于主题的设置。这个是为了软件盘行为默认的设置。

   

"stateUnchanged" 软键盘被保持无论它上次是什么状态,是否可见或隐藏,当主窗口出现在前面时。

"stateHidden" 当用户选择该Activity时,软键盘被隐藏——也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

"stateAlwaysHidden" 软键盘总是被隐藏的,当该Activity主窗口获取焦点时。

"stateVisible" 软键盘是可见的,当那个是正常合适的时(当用户导航到Activity主窗口时)

"stateAlwaysVisible" 当用户选择这个Activity时,软键盘是可见的——也就是,也就是,当用户确定导航到该Activity时,而不是返回到它由于离开另一个Activity

   

"adjustUnspecified" 它不被指定是否该Activity主窗口调整大小以便留出软键盘的空间,或是否窗口上的内容得到屏幕上当前的焦点是可见的。系统将自动选择这些模式中一种主要依赖于是否窗口的内容有任何布局视图能够滚动他们的内容。如果有这样的一个视图,这个窗口将调整大小,这样的假设可以使滚动窗口的内容在一个较小的区域中可见的。这个是主窗口默认的行为设置。

   

"adjustResize" 该Activity主窗口总是被调整屏幕的大小以便留出软键盘的空间。

   

"adjustPan" 该Activity主窗口并不调整屏幕的大小以便留出软键盘的空间。相反,当前窗口的内容将自动移动以便当前焦点从不被键盘覆盖和用户能总是看到输入内容的部分。这个通常是不期望比调整大小,因为用户可能关闭软键盘以便获得与被覆盖内容的交互操作。

   

Android EditText 属性汇总

android:layout_gravity="center_vertical"

设置控件显示的位置:默认top,这里居中显示,还有bottom

android:hint="请输入数字!"

设置显示在空间上的提示信息

android:numeric="integer"

设置只能输入整数,如果是小数则是:decimal

android:singleLine="true"

设置单行输入,一旦设置为true,则文字不会自动换行。

android:password="true"

设置只能输入密码

android:textColor = "#ff8c00"

字体颜色

android:textStyle="bold"

字体,bold, italic, bolditalic

android:textSize="20dip"

大小

android:capitalize = "characters"

以大写字母写

android:textAlign="center"

EditText没有这个属性,但TextView

android:textColorHighlight="#cccccc"

被选中文字的底色,默认为蓝色

android:textColorHint="#ffff00"

设置提示信息文字的颜色,默认为灰色

android:textScaleX="1.5"

控制字与字之间的间距

android:typeface="monospace"

字型,normal, sans, serif, monospace

android:background="@null"

空间背景,这里没有,指透明

android:layout_weight="1"

权重,控制控件之间的地位,在控制控件显示的大小时蛮有用的。

android:textAppearance="?android:attr/textAppearanceLargeInverse"

文字外观,这里引用的是系统自带的一个外观,?表示系统是否有这种外观,否则使用默认的外观。不知道这样理解对不对?

   

通过EditTextlayout xml文件中的相关属性来实现:

1. 密码框属性 android:password="true" 这条可以让EditText显示的内容自动为星号,输入时内容会在1秒内变成*字样。

2. 纯数字 android:numeric="true" 这条可以让输入法自动变为数字输入键盘,同时仅允许0-9的数字输入

3. 仅允许 android:capitalize="cwj1987" 这样仅允许接受输入cwj1987,一般用于密码验证

下面是一些扩展的风格属性

android:editable="false" 设置EditText不可编辑

android:singleLine="true" 强制输入的内容在单行

android:ellipsize="end" 自动隐藏尾部溢出数据,一般用于文字内容过长一行无法全部显示时

   

   

RelativeLayout布局

   

android:layout_marginTop="25dip" //顶部距离

android:gravity="left" //空间布局位置

android:layout_marginLeft="15dip //距离左边距

   

// 相对于给定ID控件

android:layout_above 将该控件的底部置于给定ID的控件之上;

android:layout_below 将该控件的底部置于给定ID的控件之下;

android:layout_toLeftOf 将该控件的右边缘与给定ID的控件左边缘对齐;

android:layout_toRightOf 将该控件的左边缘与给定ID的控件右边缘对齐;

android:layout_alignBaseline 将该控件的baseline与给定IDbaseline对齐;

android:layout_alignTop 将该控件的顶部边缘与给定ID的顶部边缘对齐;

android:layout_alignBottom 将该控件的底部边缘与给定ID的底部边缘对齐;

android:layout_alignLeft 将该控件的左边缘与给定ID的左边缘对齐;

android:layout_alignRight 将该控件的右边缘与给定ID的右边缘对齐;

   

// 相对于父组件

android:layout_alignParentTop 如果为true,将该控件的顶部与其父控件的顶部对齐;

android:layout_alignParentBottom 如果为true,将该控件的底部与其父控件的底部对齐;

android:layout_alignParentLeft 如果为true,将该控件的左部与其父控件的左部对齐;

android:layout_alignParentRight 如果为true,将该控件的右部与其父控件的右部对齐;

   

// 居中

android:layout_centerHorizontal 如果为true,将该控件的置于水平居中;

android:layout_centerVertical 如果为true,将该控件的置于垂直居中;

android:layout_centerInParent 如果为true,将该控件的置于父控件的中央;

   

// 指定移动像素

android:layout_marginTop 上偏移的值;

android:layout_marginBottom 下偏移的值;

android:layout_marginLeft 左偏移的值;

android:layout_marginRight 右偏移的值;

   

android:id --- 为控件指定相应的ID

android:text --- 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串

android:grivity --- 指定控件的基本位置,比如说居中,居右等位置这里指的是控件中的文本位置并不是控件本身。

android:textSize --- 指定控件当中字体的大小

android:background --- 指定该控件所使用的背景色,RGB命名法

android:width --- 指定控件的宽度

android:height --- 指定控件的高度

android:padding* --- 指定控件的内边距,也就是说控件当中的内容

android:sigleLine --- 如果设置为真的话,则控件的内容在同一行中进行显示

   

下边是相对布局属性的说明:RelativeLayout

   

android:layout_above 将该控件的底部至于给定ID控件之上

android:layout_below 将该控件的顶部至于给定ID的控件之下

android:layout_toLeftOf 将该控件的右边缘和给定ID的控件左边缘对齐

android:layout_toRightOf 将该控件的左边缘和给定ID的控件的右边缘对齐

   

android:layout_alignBaseline 该控件的baseline和给定ID的控件的baseline对齐

android:layout_alignBottom 将该控件的底部边缘与给定ID控件的底部边缘对齐

android:layout_alignLeft 将该控件的左边缘与给定ID控件的左边缘对齐

android:layout_alignRight 将该控件的右边缘与给定ID控件的右边缘对齐

android:layout_alignTop 将该控件的顶部边缘与给定ID控件的顶部对齐

   

android:alignParentBottom 如果该值为true,则将该控件的底部和父控件的底部对齐

android:layout_alignParentLeft 如果该值为true,则将该控件左边与父控件的左边对齐

android:layout_alignParentRight 如果该值为true,则将该控件的右边与父控件的右边对齐

android:layout_alignParentTop 如果该值为true,则将该控件的顶部与父控件的顶部对齐

   

android:layout_centerHorizontal 如果为真,该控件将被至于水平方向的中央

android:layout_centerInParent 如果为真,该控件将被至于父控件水平方向和垂直方向的中央

android:layout_centerVertical 如果为真,该控件将被至于垂直方向的中央

android:layout_marginLeft此属性用来设置控件之间的间隙(控件和控件之间和内边距不同)

android:padding="3dip"说明了四边的内边距是3dip

   

   

TableLayout

   

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

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:stretchColumns="0"

></TableLayout>

   

android:stretchColumns="0"第一列作为拉伸列填满整行

 

●字体放在assetsfont,目录下

 

SQLite中注意的问题

SQLite中, VARCHAR的大小设置得足够大, 比如200, 就可以换行了. 无需使用\n等转义字符.

 

android:ems = "10" 设置TextView或者Edittext的宽度为10个字符的宽度。当设置该属性后,控件显示的长度就为10个字符的长度,超出的部分将不显示。

 

●透明度

text = (TextView) findViewById(R.id.text);

text.getBackground().setAlpha(12);

setAlpha()的括号中可以填0–255之间的数字。数字越大,越不透明。

 

 

第十章

AttributeSet

A collection of attributes, as found associated with a tag in an XML document.

 

●关于ARGB_8888ALPHA_8ARGB_4444RGB_565的理解

A:透明度

R:红色

G:绿

B:蓝

 

Bitmap.Config ARGB_4444:每个像素占四位,即A=4R=4G=4B=4,那么一个像素点占4+4+4+4=16

Bitmap.Config ARGB_8888:每个像素占四位,即A=8R=8G=8B=8,那么一个像素点占8+8+8+8=32

Bitmap.Config RGB_565:每个像素占四位,即R=5G=6B=5,没有透明度,那么一个像素点占5+6+5=16

Bitmap.Config ALPHA_8:每个像素占四位,只有透明度,没有颜色

一般情况下我们都是使用的ARGB_8888,由此可知它是最占内存的,因为一个像素占32位,8=1字节,所以一个像素占4字节的内存。假设有一张480x800的图片,如果格式为ARGB_8888,那么将会占用1500KB的内存。

 

androidpivotX

android:pivotX表示相对于物件的XY坐标的位置,从0%-100%中取值,50%为物件的XY方向坐标上的中点位置。

 

R文件没有更新的问题

在当前项目没有任何错误的情况下, projectclean

否则R文件会自动消失

 

如果res/layout文件夹下有一个.xml布局文件有错误, 那么即使另一个.xml布局文件无误, R文件也不会更新

 

fragment在onAttach后才获取activity,所以你可以在onAttach里初始化,或者在其后的生命周期里初始化,在onAttach之前getActivity是肯定不行的:

@Override

public void onAttach(Activity activity) {

super.onAttach(activity);

}

 

获取Fragmentcontext

getActivity().getApplicationContext()

 

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁

Activity.this的context 返回当前activity的上下文,属于activity activity 摧毁他就摧毁

getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文

public class MyActivity extends Activity {

public void method() {

mContext = this; // since Activity extends Context

mContext = getApplicationContext();

mContext = getBaseContext();

}

}

 

如何不实例化类来调用类中的非静态方法?

类内部可以声明该类本身的一个实例,即使该类还没有定义完

当把一个Activity变成Fragment时,getActivity()这一函数很重要,它可以代表一个Activity,也可以代表一个Contextsince Activity extends Context

LocalBroadcastManager.getInstance(getActivity()).sendBroadcast(intent);

推荐阅读