android手册,安卓开发手册中文版
android 的action bar有什么作用
下面是一个actionbar的使用截图,来源于android学习手册,360手机助手中可下载,里面有108个例子,源码还有文档
目前创新互联已为上千家的企业提供了网站建设、域名、雅安服务器托管、网站托管维护、企业网站设计、宁城网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观。你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中。
Action bar的主要目的是:
1. 提供一个用于识别应用程序的标示和用户的位置的专用空间。
这个空间的左边是应用的图标或logo,以及Activity的标题。但是,如果是像当前选择的标签这样的标识当前View对象的导航标签,你可以选择删除Activity的标题。
2. 在不同的应用程序之间提供一致的导航和视觉体验。
Action bar提供了用于Fragment间切换的内置导航标签。它还提供了一个用于替换导航模式或优化当前视觉效果(如按照不同条件排序的列表)的下拉列表。
3. 突出Activity的关键操作(如“搜索”、“创建”、“共享”等),并且在可预见的方法内给用户提供快捷的访问。
对于关键的用户操作,你能够通过把选项菜单项作为操作项直接放到操作栏中,从而提供快捷的访问。操作项目还能提供一个操作窗口,这个窗口给更直接的操作行为提供一个嵌入的窗口部件。没有改进成操作项的菜单项在溢出菜单中还是有效的,用户既可以使用设备上的菜单按钮(设备上有按钮的时候),也可以使用操作栏中的溢出菜单按钮(当设备上不包含菜单按钮时)来显示这些操作项目。
上面的总结一下:Action bar就是替换3.0以前的tittle bar和menu。
图1. Honeycomb Gallery应用中的操作栏,从左边开始,依次是logo、导航选项标签和操作项(在右边插入的一个悬浮菜单按钮)。
Note: If you're looking for information about the contextual action bar for displaying contextual action items, see the Menu guide.
Action Bar Design For design guidelines, read Android Design's Action Bar guide.
添加Action Bar
从Android3.0(API级别 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity(或者是这些Activity的子类)中,当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一。如:
[html] view plain copy print?
manifest ...
uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" /
...
/manifest
manifest ...
uses-sdk android:minSdkVersion="4"
android:targetSdkVersion="11" /
...
/manifest
在这个例子中,应用程序要求最小的API版本级别是4(Android 1.6),但是它还要求了目标API版本级别是11(Android 3.0)。这样,当应用程序运行在Android3.0或更高的版本上时,系统就会给每个Activity应用holographic 主题,这样,每个Activity就会包含Action bar。
如果你想使用ActionBar API来进行添加导航模式和修改操作栏样式的操作,你应该把minSdkVersion属性设置为“11”或更大的值。有一些方法可以使你的应用支持更旧的Android版本,同时在API等级为11或更高的API等级的机器的使你的应用支持一些Action bar apis。为了保持后向兼容,请参考边框内的内容(边框内容如下)。
Remaining backward-compatible
If you want to provide an action bar in your application and remain compatible with versions of Android older than 3.0, you need to create the action bar in your activity's layout (because theActionBar class is not available on older versions).
To help you, the Action Bar Compatibility sample app provides an API layer and action bar layout that allows your app to use some of theActionBar APIs and also support older versions of Android by replacing the traditional title bar with a custom action bar layout.
删除Action bar
如果你不想要Action bar,把Activity的主题设置为Theme.Holo.NoActionBar就可以了,如:
[html] view plain copy print?
activity android:theme="@android:style/Theme.Holo.NoActionBar"
activity android:theme="@android:style/Theme.Holo.NoActionBar"
或者使用Action bar的 hide()方法,如下:
[java] view plain copy print?
ActionBar actionBar = getActionBar();
actionBar.hide();
ActionBar actionBar = getActionBar();
actionBar.hide();
当Action bar隐藏时,系统会调整你的Activity来填充当前有效的屏幕空间。你能够使用show()方法来再次显示操作栏。
在隐藏和删除Action bar时,要当心为了适应被Action bar占用的空间而导致的Activity的重新布局。如果你的Activity有规律的隐藏和显示Action bar,你可能想要使用覆盖模式。覆盖模式在Activity的顶部描画操作栏,而不是在它们所拥有的屏幕的区域。这样,在Action bar隐藏和重新显示时,你的布局保持不变。要使用覆盖模式,就要给Activity创建一个主题,并且把android:windowActionBarOverlay属性设置为true。
提示:如果你有一个删除了Action bar的定制化的Activity主题,它把android:windowActionBar样式属性设置为false。但是,如果你使用了删除Action bar的一个主题,那么,创建窗口将不允许Action bar再显示,因此,你不能在以后给这个Activity添加Action bar---因为getActionBar()方法将返回null。
添加操作项
有些时候,你可能想要让用户直接访问选项菜单中的一个项目,因此你要把应该在Action bar中显示的菜单项作为一个操作项来声明。操作项能够能够包含一个图标或文本标题。如果一个菜单项不作为一个操作项显示,那么系统就会把它放到悬浮菜单中。悬浮菜单既可以通过设备的Menu按钮来显示,也可以在Action bar中一个额外的按钮来显示。
当Activity首次启动时,系统会调用onCreateOptionsMenu()方法给你的Activity组装Action bar和悬浮菜单。在这个回调方法中应该加载在XML文件中定义的菜单项资源,如:
[java] view plain copy print?
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity, menu);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity, menu);
return true;
}
图2. 带有图标和文本标题的两个操作项,和悬浮菜单按钮。
在XML文件中,你能够通过给item元素声明android:showAsAction=”ifRoom”属性,请求把一个菜单项作为一个操作项来显示。用这种方式,只在有有效的空间时,菜单项才能显示在Action bar中。如果没有足够的空间,这个菜单项会显示在悬浮菜单中。
如果你的菜单项支持标题和图标---带有android:title和android:icon属性---那么默认情况下,操作项仅显示图标。如果你要显示文本标题,就要给android:showAsAction属性添加withText设置,如:
android app怎么防止反编译
APK在PC上面就被看作一个压缩格式文件,在手机上面它就算一个可执行格式文件。两种格式对它的读取要求也有区别,所以说利用这个区别来实现伪加密。对PC端来讲伪加密的APK没法被解包无法被反编译,但是对android系统来说它完全不会影响正常的安装运行(对4.2以前的系统)。
伪加密的原理:读取APK的字节,找到连续4位字节标记为”P K 01 02”的后第5位字节,如果是0表示不加密,如果是1就表示加密(伪加密就强行改成1 反伪加密就是把1改成0就可以了)。
2
伪加密前和伪加密后的对比图如下:
伪加密前:
3
伪加密后:
END
使用第三方平台加密
步骤如下:
登录/注册→上传APK→等待系统加密→完成后下载APK→给APK签名→完成!
2
爱加密作为移动安全行业的第三方平台,为Android APP移动应用提供专业的加固保护方案,包括DEX文件保护、资源文件保护、XML主配文件保护、防二次打包保护、so文件保护、内存保护、高级混淆等,全方位保护Android App,防止被反编译、破解等,维护广大开发者朋友的切身利益!
Android Studio怎么用
鉴于Android Studio使用Gradle构建项目,在IDE的使用过程中可能会遇到很多令人头疼的问题。大锤也是第一次接触,为有个基本的认识,特找来Android官方手册,和大家一起学习学习。翻译不当之处,望指出。
为什么要用Gradle?
Gradle是比较先进的构建系统,也是一个很好的构建工具,允许通过插件自定义构建逻辑
以下是为什么Android Studio选择Gradle的主要原因:
使用领域专用语言(Domain Specific Language)来描述和处理构建逻辑。(以下简称DSL)
基于Groovy。DSL可以混合各种声明元素,用代码操控这些DSL元素达到逻辑自定义。
支持已有的Maven或者Ivy仓库基础建设
非常灵活,允许使用best practices,并不强制让你遵照它的原则来。
其它插件时可以暴露自己的DSL和API来让Gradle构建文件使用。
允许IDE集成,是很好的API工具
阅读更多:Gradle使用手册(一):为什么要用Gradle?
如何将Eclipse中的项目迁移到Android Studio 中
用户评价: / 64
最后更新于 2013年11月08日
点击数:37396
英文地址:
翻译:Android Studio 中文组(大锤译)
如果你之前有用Eclipse做过安卓开发,现在想要把Eclipse中的项目导入到Android Studio的环境中,那么首先要做的是生成Build Gradle的文件。因为Android Studio 是用Gradle来管理项目的,具体操作步骤如下:
阅读更多:如何将Eclipse中的项目迁移到Android Studio 中
Gradle使用手册(二):项目结构
用户评价: / 55
最后更新于 2013年11月09日
点击数:26141
原文地址:
翻译:Android Studio 中文组(大锤译)
续Gradle(一)
项目结构
两大组件(source sets): main source code 和 test code. 它们分别在以下两个目录中:
src/main/
src/instrumentTest/
这两个目录里面,又分别有各自的代码源文件和资源文件。
java/
resources/
对于 Android plugin, 又有以下额外的目录:
AndroidManifest.xml
res/
assets/
aidl/
rs/
jni/
阅读更多:Gradle使用手册(二):项目结构
如何引入第三方jar包(以google play service为例)
用户评价: / 24
最后更新于 2013年11月08日
点击数:21122
原文地址:
翻译:Android Studio 中文组(大锤译)
在Android Studio(AS)的开发中,遇到引入外部类库或第三方jar包的情况,确实是件很恼人的事情。因为AS是基于Gradle构建,所以和传统的导入方式有些不一样。
笔者也曾为此头疼过好一阵,现在终于有了解决办法,拿出来和大家分享一下。
这里以导入Google Services library为例,具体操作步骤如下。
1. 打开你的buid.gradle文件。应该用哪一个呢?Project中的,还是Module中的?(如图所示,Module中的)
2 . 将google-play-services.jar这个jar包拷到指定的位置。原来可能是在这个目录下:$ANDROID-SDK/extras/google/google_play_services/libproject/google-play-services_lib/libs ,比如现在我把它放到了$GOOGLE_PLAY_LIB目录下。
阅读更多:如何引入第三方jar包(以google play service为例)
Gradle使用手册(三):构建任务
用户评价: / 24
最后更新于 2013年11月09日
点击数:18730
原文地址:
翻译:Android Studio 中文组(大锤译)
接续: Gradle(一) | Gradle(二)
通用任务
将一个plugin运用到build file中时,会自动创建一系列的构建任务(build task)去运行。Java plugin和Android Plugin也都会如此。
我们对于任务的约定有以下四个:
assemble任务,汇集所有项目输出
check任务,运行所有校验
build任务,既汇集又校验
clean任务,清除所有项目输出
assemble, check and build任务自己本身不做任何事情,它们只是plugin锚点,真正任务的是由plugin来添加执行。
这样做的好处是,不管你在什么项目中,你都可以调用同样的命令来执行。
通过命令行,你可以得到更高级别的任务,命令如下:
gradle tasks
列出当前运行的所有任务,以及查看他们之间的依赖关系:
gradle tasks --all
注: Gradle会自动地检测一个任务中申明的输入和输出。当重复执行两次build任务时,Gradle会报告当前所有任务是UP-TO-DATE的状态。
新手Android中px=dp*(dpi/160)的解释
在160dpi的手机上1px=1dp,这句话的以上是说 ,手机屏幕宽带被分割成了160块,每一块有一个像素点,每一块就是一个dp。 那么1dp=1px
而320dpi的手机上,分辨率是上一个手机的两倍,手机屏幕宽带也被分割成了160块,每一块有两个像素点,每一块也是一个dp,那么1dp=2px
上面分析来自于android学习手册,360手机助手中可以下载,里面有108个android例子,源码文档都可在里面看,下面是截图
下面是dp与px的转换公式,也来自android学习手册,经常使用。
import android.content.Context;
public class DensityUtil {
/**
* 根据手机的分辨率从 dp 的单位 转成为 px(像素)
*/
public static int dip2px(Context context, float dpValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (dpValue * scale + 0.5f);
}
/**
* 根据手机的分辨率从 px(像素) 的单位 转成为 dp
*/
public static int px2dip(Context context, float pxValue) {
final float scale = context.getResources().getDisplayMetrics().density;
return (int) (pxValue / scale + 0.5f);
}
}
android format怎么用
下面是android学习手册的文档介绍,如果想看例子,请去下载android学习手册。android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行, 源码采用android studio目录结构,高亮显示代码,文档都采用文档结构图显示,可以快速定位。360手机助手中下载,图标上有贝壳
常规类型的格式化
String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。
format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。
public static void main(String[] args) {
String str=null;
str=String.format("Hi,%s", "王力");
System.out.println(str);
str=String.format("Hi,%s:%s.%s", "王南","王力","王张");
System.out.println(str);
System.out.printf("字母a的大写是:%c %n", 'A');
System.out.printf("37的结果是:%b %n", 37);
System.out.printf("100的一半是:%d %n", 100/2);
System.out.printf("100的16进制数是:%x %n", 100);
System.out.printf("100的8进制数是:%o %n", 100);
System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);
System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);
System.out.printf("上面价格的指数表示:%e %n", 50*0.85);
System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);
System.out.printf("上面的折扣是%d%% %n", 85);
System.out.printf("字母A的散列码是:%h %n", 'A');
}
public static void main(String[] args) {
String str=null;
str=String.format("Hi,%s", "王力");
System.out.println(str);
str=String.format("Hi,%s:%s.%s", "王南","王力","王张");
System.out.println(str);
System.out.printf("字母a的大写是:%c %n", 'A');
System.out.printf("37的结果是:%b %n", 37);
System.out.printf("100的一半是:%d %n", 100/2);
System.out.printf("100的16进制数是:%x %n", 100);
System.out.printf("100的8进制数是:%o %n", 100);
System.out.printf("50元的书打8.5折扣是:%f 元%n", 50*0.85);
System.out.printf("上面价格的16进制数是:%a %n", 50*0.85);
System.out.printf("上面价格的指数表示:%e %n", 50*0.85);
System.out.printf("上面价格的指数和浮点数结果的长度较短的是:%g %n", 50*0.85);
System.out.printf("上面的折扣是%d%% %n", 85);
System.out.printf("字母A的散列码是:%h %n", 'A');
}
Hi,王力
Hi,王南:王力.王张
字母a的大写是:A
37的结果是:false
100的一半是:50
100的16进制数是:64
100的8进制数是:144
50元的书打8.5折扣是:42.500000 元
上面价格的16进制数是:0x1.54p5
上面价格的指数表示:4.250000e+01
上面价格的指数和浮点数结果的长度较短的是:42.5000
上面的折扣是85%
字母A的散列码是:41
Hi,王力
Hi,王南:王力.王张
字母a的大写是:A
37的结果是:false
100的一半是:50
100的16进制数是:64
100的8进制数是:144
50元的书打8.5折扣是:42.500000 元
上面价格的16进制数是:0x1.54p5
上面价格的指数表示:4.250000e+01
上面价格的指数和浮点数结果的长度较短的是:42.5000
上面的折扣是85%
字母A的散列码是:41
搭配转换符的标志,如图所示。
public static void main(String[] args) {
String str=null;
//$使用
str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");
System.out.println(str);
//+使用
System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);
//补O使用
System.out.printf("最牛的编号是:%03d%n", 7);
//空格使用
System.out.printf("Tab键的效果是:% 8d%n", 7);
//.使用
System.out.printf("整数分组的效果是:%,d%n", 9989997);
//空格和小数点后面个数
System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);
}
public static void main(String[] args) {
String str=null;
//$使用
str=String.format("格式参数$的使用:%1$d,%2$s", 99,"abc");
System.out.println(str);
//+使用
System.out.printf("显示正负数的符号:%+d与%d%n", 99,-99);
//补O使用
System.out.printf("最牛的编号是:%03d%n", 7);
//空格使用
System.out.printf("Tab键的效果是:% 8d%n", 7);
//.使用
System.out.printf("整数分组的效果是:%,d%n", 9989997);
//空格和小数点后面个数
System.out.printf("一本书的价格是:% 50.5f元%n", 49.8);
}
日期和事件字符串格式化
在程序界面中经常需要显示时间和日期,但是其显示的 格式经常不尽人意,需要编写大量的代码经过各种算法才得到理想的日期与时间格式。字符串格式中还有%tx转换符没有详细介绍,它是专门用来格式化日期和时 间的。%tx转换符中的x代表另外的处理日期和时间格式的转换符,它们的组合能够将日期和时间格式化成多种格式。
读取并显示输入消息文本Android问题,怎么解决
这个问题也困扰过我,后来我终于发现了。就是一个很简单的方法. findViewById. 下面解决方法来源于android学习手册,android学习手册包含9个章节,108个例子,源码文档随便看,例子都是可交互,可运行,源码采用android studio目录结构,高亮显...
网页名称:android手册,安卓开发手册中文版
文章地址:http://scyanting.com/article/dsdejjd.html