android的一些新东西

        在android中有一些很有用的特性容易被我们忽略。

        1.在xml中的控件中添加android:onClick="xxxx",这样当这个控件被点击之后就会在Activity中调用相应的public void xxxx(){}方法了。这种方式是android1.6才开始提供的。

        2.在android studio中添加jar包时,需要特别注意,这里跟ADT不一样,android studio不会自动帮你关联好,需要你将jar包添加到libs中之后,在Project Structure中添加关联,要不然是使用不了的,这点需要特别注意,容易被从ADT转android studio的同学遗漏!

        3.尽管在Meterial Design中已经提供了RecyclerView,但是其实在之前Github上有一个drag-sort-listview项目已经可以实现拖曳排序,左右滑动删除等功能了。

        4.android的动画需要在3.0版本以上才能实现,但是在Github上有一个NineOldAndroids项目可以实现兼容3.0一下的版本。

        5.使用Github上的DiskLruCache项目可以实现硬盘的高速缓存。

        6.ACRA是Github上一个用于当app发生崩溃时,将错误信息以谷歌文档电子表的形式发送的库。

        7.使用图标其实可以使用android自身的图标,除了android SDK自身提供的lc_launcher.png之外,其实还可以自己定制一些简单的图标。这里如果是在ADT中的话,可以使用快捷键ctrl+N或者在new->other->android->Android Icon Set,然后可以选择Launcher Icons模式,输入名字,按下Next之后,开始定制图标,我们有图片,剪贴画,文字三种模式进行生成,然后ADT会提示覆盖原本的图标,最后这些图标将会放置在drawable-l,drawable-m,drawable-h,drawable-xh,drawable-xxh这些文件夹中。如果使用的是android studio其实方式也是类似的,New->Image Asset然后就可以打开生成图标的界面了,但是android studio生成的图标形式更加多样化了,而且最后生成的图标是放置在mipmap-l,mipmap-m,mipmap-h,mipmap-xh,mipmap-xxh这些文件夹里面。

        8.在使用android studio中的New生成一些新东西中,应该注意,New功能跟ADT不大一样了,但是还是可以从中找出我们需要的东西。另外需要注意的是,android studio提供的更为合理,提供的更多,更有用。在android studio中,New->XML中,有生成Layout XML Files和Values XML Files两种选项可以生成我们需要的常见文件。在New->Folder中有我们需要的几乎所有的文件夹,例如assets文件夹,资源文件夹,java文件夹等。在New下还有例如:Activity,Fragment,Service。另外New->UI Component中还可以自定义控件,这种空间是继承自View的,同时还会生成一个XML示例,所以相当方便。同时在New->Other里面还可以生成AndroidManifest文件,还有ContentProvider,BroadcastReceiver。所以说New里面可以生成四大控件和项目下需要的所有文件夹和文件。

        9.在SDK的Extras文件夹下的文件夹里面如果有m2repository文件夹,那么需要注意,这个文件夹并没有什么用处,这个文件夹只是配置下载资源的文件,就像svn的文件夹一样,这点需要注意!

        10.使用android studio的New->LoginActivity生成登录Activity即可,系统会帮你创建activity,xml界面,这样省去很多麻烦。但是需要注意的是,LoginActivity会使用到PlusBaseActivity,这个Activity继承自AppCompatActivity,但是用到了GooglePlayServicesClient,所以会报错,这里需要注意Google在Google Play Service 7.X之后就已经不再支持GooglePlayServicesClient了,需要使用GoogleApiClient代替。另外,还有一个PlusClient会报错。这里其实google的东西我们是用不上的,可以删除,我们只需要摘取需要的部分就行了。(应该注意,google有GooglePlay和Google+两种app)

        11.编辑google的东西需要在gradle里面的dependencies下添加compile'com.google.android.gms:play-services:7.5.0'

        12.在android studio中使用模板是比较麻烦的,尽管比较详细。将模板作为参考即可,一般不用去使用它,例如使用LoginActivity,这里创建的Activity关键了很多其他的Activity,用起来就不方便了,所以参考就好不用去使用。

        13.注意,在android studio中,报错之后未必就会直接定位到出错地点,也有可能是直接就定位到生成的apk的配置文件下,这个时候需要搞清楚状况,因为这些配置文件跟项目下的文件是同名的,往往一不小心就混淆了导致,删完又回来了。所以说,android studio报错之后需要分清楚文件是apk配置文件还是项目里的文件,不要混淆了而浪费时间。




        在android 1.5之后提供了AppWidget,这是一种可以拖动到用户界面跟用户进行交互,应该注意,AppWidget继承自BroadcastReceiver。如果在android studio,可以直接使用New->Widget生成一个需要的AppWidget,这样省去很多的步骤,开发会更快。

        顺带一提,在android studio中,可以使用New->UI Component来生成一个自定义的控件,这个控件继承自View,并且已经将需要的方法添加在里面了,所以很方便!

        在android studio的New->Activity中有很多可以用的模板可以省去我们很多麻烦,我们可以选择生成需要的Activity模板。


        android有很多种版本,release,debug,test版本。以前的ADT的做法是使用android.mk文件进行配置,这里mk的意思是make构建的意思,然而这是一种非常麻烦的做法,配置起来比较麻烦。而在android studio中直接使用build.gradle的配置即可完成多版本输入,这是android studio比较方便的地方。



        控件设置android:keepScreenOn属性可以让当前Activity如果在显示,那么屏幕竟会一直处于高亮,不会自动黑屏。

        android:textStyel可以设置字体的样式,例如bold加粗,italic斜体,normal正常。



        特别注意,在android kitkat中,有添加新特性,那就是可以将标题栏,状态栏,导航栏设置为透明,这里需要继承*.TranslucentDecor风格,例如:Theme.Holo.Light.NoActionBar.TranslucentDecor。然后设置android:windowTranslucentStatus,android:windowTranslucentNavigation为true,在style里面设置如下:

<style name="BarStyel" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
</style>
但是需要注意,这种style会变让状态栏以遮盖的形式覆盖我们的app界面,这点是需要注意的地方。另外,设置这种item需要高版本,所以这种style基本上低版本用不了。

        或者使用Activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);以及

Activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);但是需要特别注意,由于这种特性是KitKat版本的,所以需要的版本很高,所以需要判断版本。判断Build.VERSION_SDK_INT是否大于等于Build.VERSION_CODES.KITKAT。

        顺便说一下,设置app背景为透明虽然有很多种方法,但是需要注意的是设置window为透明的情况,例如android:windowTranslucentStatus,android:windowIsTranslucent等。这里我们可以自定义一个标准的透明背景风格,代码如下所示:

<style name="Transparent">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
</style>
        这里android:windowIsTranslucent设置window的透明。

        注意,设置状态栏,导航栏透明这种特性会将界面提到跟状态栏等高,所以需要在我们的布局界面的根布局中加入android:fitsSystemWindows="true"。而且这里使用的标题栏是ActionBar,而后面所提倡使用的是ToolBar,但这里又需要用到*.TranslucentDecor类型的style,例如:Theme.Holo.Light.NoActionBar.TranslucentDecor。而ToolBar兼容模式下并没有*.TranslucentDecor类型的风格,所以如果真的需要使用,那么只能在我们的style下添加两个item项

<item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowTranslucentNavigation">true</item>
这样就不会受到*.TranslucentDecor类型style的影响了。

        总的来说,设置状态栏,导航栏透明这种特性需要的版本太高了,一般用不上。


        android:contentDescription属性是用于描述控件的属性,这个属性基本上没有用,因为这个属性需要在google下载TalkBack然后后对于实力有障碍的人点击控件之后会使用人声读出属性的文字作为提醒。


        特别注意,在XML布局中,有一个特别重要的特性tool:context="ActivityName",例如

tools:context="com.example.administrator.myapplication.FullscreenActivity"
这个特性并不会被打包进apk里面,但是Layout Editor也就是我们的编辑XML时查看布局效果时,这个属性就非常有用了。当Activity有自己的Style风格时,Layout Editor一旦检查到这个特性就会将这个style加载进来,这样,XML布局效果就可以看到了。

        应该说,在android中编辑XML中,Layout Editor有一个非常有用的XML命名空间,

xmlns:tools="http://schemas.android.com/tools"

这个命名空间可以让我们使用tools工具,这个工具的属性并不会被打包进apk里面,但是在编辑中使用可以让编辑更加高效。

        tools的属性tools:xxx几乎可以覆盖所有android:xxx的属性,例如tools:text。而且tools:xxx有自己的属性。对于tools的属性,分为两种,一种是影响lint的属性,例如:tools:ignore,tools:targetApi,tools:locale;一种是关于XML布局设计的,例如:tools:context,tools:menu,tools:actionBarNavMode,tools:listitem / listheader / listfooter,tools:showIn,tools:layout;

        tools:ignore可以让lint忽略检查,例如tools:ignore="contentDescription"。tools:targetApi则是当minSdk比较小,而当前控件使用的版本较高,而我们不想lint报错时使用,例如minSdk为15,我们可以给控件添加tools:targetApi="LOLLIPOP",这样lint就不会显示警告了。tools:locale则是使用本地语言,当values/strings.xml文件下使用的字符串不是英语,则会提示错误,这个时候可以在<resources>节点中添加tools:locale="it"说明使用的不是英语。

        其实Layout Editor布局预览非常智能,当tools:context跟activity关联之后,会自动关联activity的onCreateOptionsMenu方法以显示菜单,而tools:menu属性可以覆盖这种默认行为。例如tools:menu="menu_main,menu_edit",如果是tools:menu=""则菜单不会显示。需要特别注意的是Theme.AppCompat中tools:menu属性不起作用。

        tools:actionBarNavMode模式告诉布局预览app bar的显示模式,可以是standard,tabs,list。同样的,Theme.AppCompat,Theme.Meterial,还有ToolBar的情况不适用。或者说,之后holo模式才可以使用。

        tools:listitem,tools:listheader,tools:listfooter顾名思义就是给ListView,ExpandableListView添加预览用的子项,头部,尾部的属性。

        tools:layout告诉布局预览fragment应该是显示成什么样子的,例如:tools:layout="@android:layout/list_content"。

        tools:showIn属性作用于一个被include的布局的根布局中,这样在布局中就可以看见被include的布局了。


        tools很有用,但会有限制,同时使用的开发工具最好是android studio,因为有一些属性android studio支持得更好。但是同样需要注意,tools并不会打包进apk里面仅仅起到一个辅助的作用而已,所以如果不需要辅助的话,其实这个工具作用就不到了。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值