Android开发技巧——设置系统状态栏颜色

Android笔记 同时被 2 个专栏收录
133 篇文章 0 订阅

开门见山,先来三张效果图:
Android5.1.1华为P7运行效果
Android6.0华为5C运行效果
Android6.0华为5C状态栏为白色时运行效果

然后我们再来讲如何实现以及如何快速地实现

如何实现

实现设置系统状态栏颜色需要至少在Android 4.4.2(API 19)以上。这是因为,在这个版本以下,没有任何的API可以帮助我们来实现。那么具体如何设置呢?

Android 4.4.2

实现

Android 4.4.2新增了一个特性,即可以设置系统状态栏为半透明。设置方法有两种,一是通过在主题style中添加以下属性:

<item name="android:windowTranslucentStatus">true</item>

二是通过在JAVA代码中设置,即以下代码:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

设置系统状态栏为半透明之后,我们就可以通过往Window窗口的decorView添加一个View,让它大小与系统状态栏一样,然后设置这个view的背景,就可以实现修改状态栏颜色的效果了。代码如下:

        ViewGroup decorViewGroup = (ViewGroup) window.getDecorView();
        View statusBarView = new View(window.getContext());
        int statusBarHeight = getStatusBarHeight(window.getContext());
        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, statusBarHeight);
        params.gravity = Gravity.TOP;
        statusBarView.setLayoutParams(params);
        statusBarView.setBackgroundColor(color);
        decorViewGroup.addView(statusBarView);

其中获取状态栏高度的方法代码如下:

    private static int getStatusBarHeight(Context context) {
        int statusBarHeight = 0;
        Resources res = context.getResources();
        int resourceId = res.getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            statusBarHeight = res.getDimensionPixelSize(resourceId);
        }
        return statusBarHeight;
    }

然后在我们的Activity的onCreate方法中使用以上代码就可以了。

问题及解决方法

但是在使用之后,我们会发现,我们Activity的布局内容顶到了状态栏上去了,被状态栏及ActionBar所覆盖。解决方法很简单,只需要在我们的布局文件的根元素中设置以下属性:

android:fitsSystemWindows="true"

它的意思是使这个layout内嵌,也就是会为状态栏等留出空间,于是我们的布局就恢复正常了。
但是问题来了,假如你有几十个Activity,每一个都要修改它的布局文件,是一件让人沮丧的事情。于是,一番查找之后,我们似乎找到了答案。即通过在Application主题中配置这个属性。遗憾的是我们发现这样做之后,我们的Toast显示就不正常了,它的文字会超出黑色背景之外。
不过没关系,我们还有解决方法。那就是在setContentView()之后,加入以下代码:

    ViewGroup mContentView = (ViewGroup) window.findViewById(Window.ID_ANDROID_CONTENT);
    View mChildView = mContentView.getChildAt(0);
    if (mChildView != null) {
        //注意不是设置 ContentView 的 FitsSystemWindows, 而是设置 ContentView 的第一个子 View . 预留出系统 View 的空间.
        mChildView.setFitsSystemWindows(fitSystemWindows);
    }

也就是在JAVA代码中找到我们Activity的内容的View,并给它设置这个属性。

Android 5.0.1

在Android 5.0.1(API 21)起,官方又为我们引入了一些特性,包括一个重要的方法:

window.setStatusBarColor(color);

看起来似乎很激动人心。要使它生效,必须设置一个FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS属性,并且确保FLAG_TRANSLUCENT_STATUS不被设置。
那好,我们来实现:

    Window window = activity.getWindow();
    //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    //设置状态栏颜色
    window.setStatusBarColor(color);

遗憾的是,在我手上的P7上并没有任何效果。据说要在主题当中设置colorPrimaryDark属性,但是我试过之后发现状态栏还是没有被设成我想要的颜色,并且可能显示成其他颜色。所以这种方法我最终没有采用。

Android 6.0

Android 6.0设置状态栏的颜色的方法与上面的一致,庆幸的是,它的设置有效,代码同上:

        //取消设置透明状态栏,使 ContentView 内容不再覆盖状态栏
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        //需要设置这个 flag 才能调用 setStatusBarColor 来设置状态栏颜色
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        //设置状态栏颜色
        window.setStatusBarColor(color);

由于与API 19设置状态栏半透明并添加一个View的实现方式不同,这里是直接设置状态栏的颜色的,所以如果我们的状态栏被设为白色的话,上面同样白色的系统状态就看不到了。不过,6.0的API新增了一个属性来解决这一问题。即,如果我们设置的状态栏颜色是接近于白色的话,可以在主题中添加以下属性:

<item name="android:windowLightStatusBar">true</item>

这样,系统状态的那些文字图标就会变成黑色了,如一开始我们所看到的第三张图。
通过JAVA代码来设置的话如下:

    View decor = window.getDecorView();
    int ui = decor.getSystemUiVisibility();
    if (lightStatusBar) {
        ui |=View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    } else {
        ui &= ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR;
    }
    decor.setSystemUiVisibility(ui);

如何快速的实现

那么,你真的要在项目中根据不同系统版本来写这么多代码吗?还要改style文件?为不同的系统版本创建不同的style文件来实现这个功能?
完全可以不用,因为我已经对它做了封装。你只需要两步,就可以完成。
在项目的build.gradle中声明以下依赖:

    compile 'com.githang:status-bar-compat:latest.integration'

在你的Activity中(最好是setContentView()被调用之后)添加以下代码:

    StatusBarCompat.setStatusBarColor(this, color, lightStatusBar);

不用考虑版本,不用考虑fitsSystemWindows问题,不用考虑状态栏被设置成白色后看不到系统状态的问题,并且兼容MIUI及Flyme。那么,当你在6.0的手机上看习惯这种纯色的状态栏之后,是不是觉得手机QQ在6.0上还在用着半透明状态栏会带阴影来实现的设置状态栏颜色的效果好丑?
QQ截图20160621152845.jpg

后记

参考资料

1

相关推荐
书名:《Android开发权威指南》(人民邮电出版社.李宁) 2011年9月出版。全书共582页。 内容简介 本书内容上涵盖了用最新的Android版本开发的大部分场景。全书分4个部分,分别从Android基础介绍、环境搭建、SDK介绍,到应用剖析、组件介绍、综合实例演示,以及符合潮流的、最新的移动开发技术,如HTML5、OpenGL ES、NDK编程、Android测试驱动开发等几个方面讲述。从技术实现上,讲解了6大完整综合案例及源代码分析,分别是新浪微博客户端、蓝牙聊天、全键盘输入法、月球登陆(游戏)、贪吃蛇(游戏)、笑脸连连看(游戏)。 本书注重对实际动手能力的指导,在遵循技术研发知识体系严密性的同时,在容易产生错误、不易理解的环节上配备了翔实的开发情景截图;并将重要的知识点和开发技巧以“多学一招”、“扩展学习”、“技巧点拨”等的活泼形式呈现给读者。在程序实例的讲解方面,主要将实例安插在Android开发的精髓知识章节,这为读者学习与实践结合提供了很好的指导。 本书适合具备一定软件开发经验、想快速进入Android开发领域的程序员,具备一些手机开发经验的开发者和Android开发爱好者学习使用;也适合作为相关培训学校的Android培训教材。 目录 第一部分 准备篇 第1章 初识庐山真面目——Android开发简介 2 1.1 Android的基本概念 2 1.1.1 Android简介 2 1.1.2 Android的版本 4 1.1.3 Android系统构架 5 1.1.4 Android的应用程序框架 6 1.2 JIL Widget介绍 7 1.3 小结 8 第2章 工欲善其事,必先利其器——搭建和使用Android开发环境 9 2.1 开发包及工具的安装 9 2.1.1 开发Android程序都需要些什么 9 2.1.2 安装JDK和配置Java开发环境 10 2.1.3 Eclipse的安装与汉化 11 2.1.4 安装AndroidSDK 12 2.1.5 安装Eclipse插件ADT 13 2.2 真实体验——编写第一个Android程序(随机绘制圆饼) 15 2.2.1 创建Android工程 15 2.2.2 在模拟器中运行Android程序 17 2.2.3 界面控件的布局 19 2.2.4 编写代码 20 2.2.5 调试程序 23 2.2.6 在手机上运行和调试程序 28 2.3 迁移Android工程可能发生的错误 29 2.4 不需要写一行代码的开发工具:AppInventor 31 2.4.1 AppInventor简介 31 2.4.2 AppIntentor的下载和安装 31 2.4.3 用拖曳控件的方式设计界面 33 2.4.4 像拼图一样拼装代码 34 2.5 小结 37 第二部分 基础篇 第3章 千里之行始于足下——Android程序设计基础 40 3.1 Android应用程序框架 40 3.1.1 Android项目的目录结构 40 3.1.2 AndroidManifest.xml文件的结构 42 3.2 Android应用程序中的资源 44 3.3 Android的应用程序组件 44 3.3.1 Activity(Android的窗体) 45 3.3.2 Service(服务) 45 3.3.3 Broadcast Receiver(广播接收器) 45 3.3.4 Content Provider(内容提供者) 46 3.4 Android程序的UI设计 46 3.4.1 手工配置XML布局文件 46 3.4.2 ADT自带的可视化UI设计器 47 3.4.3 使用DroidDraw设计UI布局 47 3.5 小结 48 第4章 我的UI我做主——用户界面开发基础 49 4.1 Activity的使用方法 49 4.1.1 创建Activity 49 4.1.2 配置Activity 50 4.1.3 显示其他的Activity(Intent与Activity) 52 4.2 Activity的生命周期 55 4.3 在不同Activity之间传递数据 60 4.3.1 使用Intent传递数据 60 4.3.2 使用静态变量传递数据 62 4.3.3 使用剪切板传递数据 63 4.3.4 使用全局对象传递数据 65 4.3.5 返回数据到前一个Activity 67 4.4 视图(View) 68 4.4.1 视图简介 68 4.4.2 使用XML布局文件定义视图 69 4.4.3 在代码中控制视图 70 4.5 布局(Layout) 72 4.5.1 框架布局(FrameLayout) 72 4.5.2 线性布局(LinearLayout) 75 4.5.3 相对布局(RelativeLayout) 79 4.5.4 表格布局(TableLayout) 81 4.5.5 绝对布局(AbsoluteLayout) 82 4.5.6 重用XML布局文件 82 4.5.7 优化XML布局文件 85 4.5.8 查看apk文件中的布局 86 4.6 小结 87 第5章 良好的学习开端——控件(Widget)详解 88 5.1 常用XML属性解析 88 5.1.1 android:id属性 88 5.1.2 控件的宽度(android:layout_width)和高度(android:layout_height) 88 5.1.3 android:layout_margin属性 89 5.1.4 android:padding属性 89 5.1.5 android:layout_weight属性 90 5.1.6 android:layout_gravity和android:gravity属性 90 5.1.7 android:visibility属性 91 5.1.8 android:background属性 91 5.1.9 指定单击事件方法(android:onClick属性) 92 5.1.10 控件焦点属性(android:focusable和android:focusable-InTouchMode) 92 5.2 TextView(显示文本的控件) 93 5.2.1 显示富文本(URL、不同大小、字体、颜色的文本) 93 5.2.2 在TextView中显示表情图像和文字 97 5.2.3 单击链接弹出Activity 100 5.2.4 为指定文本添加背景 103 5.2.5 带边框的TextView 106 5.2.6 设置行间距 110 5.2.7 在未显示完的文本后面加省略号(…) 111 5.2.8 用TextView实现走马灯效果 113 5.2.9 垂直滚动TextView中的文本 114 5.3 EditText(编辑文本的控件) 115 5.3.1 像QQ一样输入表情图像 115 5.3.2 在EditText中输入特定的字符 117 5.3.3 AutoCompleteText-View(自动完成输入内容的控件) 118 5.4 按钮和复选框控件 120 5.4.1 Button(普通按钮控件) 120 5.4.2 图文混排的按钮 122 5.4.3 ImageButton(图像按钮控件) 124 5.4.4 RadioButton(选项按钮控件) 124 5.4.5 ToggleButton(开关状态按钮控件) 125 5.4.6 CheckBox(复选框控件) 126 5.5 ImageView(显示图像的控件) 128 5.5.1 ImageView控件的基本用法 128 5.5.2 显示指定区域的图像 129 5.5.3 缩放和旋转图像 132 5.6 时间与日期控件 133 5.6.1 DatePicker(输入日期的控件) 133 5.6.2 TimePicker(输入时间的控件) 134 5.6.3 DatePicker、TimePicker与TextView同步显示日期和时间 134 5.6.4 AnalogClock和DigitalClock(显示时钟的控件) 136 5.7 进度条控件 137 5.7.1 ProgressBar(进度条控件) 137 5.7.2 SeekBar(拖动条控件) 139 5.7.3 设置ProgressBar和SeekBar的颜色及背景图 140 5.7.4 RatingBar(评分控件) 143 5.8 列表控件 145 5.8.1 ListView(普通列表控件) 145 5.8.2 为ListView列表项添加复选框和选项按钮 147 5.8.3 对列表项进行增、删、改操作 149 5.8.4 改变列表项的背景色 153 5.8.5 ListActivity(封装ListView的Activity) 154 5.8.6 ExpandableListView(可扩展的列表控件) 155 5.8.7 Spinner(下拉列表控件) 157 5.9 滚动控件 160 5.9.1 ScrollView(垂直滚动控件) 160 5.9.2 HorizontalScrollView(水平滚动控件) 161 5.9.3 可垂直和水平滚动的视图 162 5.9.4 Gallery(画廊控件) 163 5.10 ImageSwitcher(图像切换控件) 164 5.11 GridView(网格控件) 166 5.12 TabHost(标签控件) 168 5.13 ViewStub(惰性装载控件) 169 5.14 小结 171 第6章 友好的菜单——Menu介绍与实例 172 6.1 菜单的基本用法 172 6.1.1 创建选项菜单(Options Menu) 172 6.1.2 带图像的选项菜单 173 6.1.3 关联Activity 173 6.1.4 响应菜单的单击动作 174 6.1.5 动态添加、修改和删除选项菜单 175 6.1.6 带复选框和选项按钮的子菜单 176 6.1.7 上下文菜单 178 6.1.8 菜单事件 179 6.1.9 从菜单资源中装载菜单 180 6.2 菜单特效 181 6.2.1 自定义菜单 181 6.2.2 模拟UCWeb效果菜单 184 6.2.3 QuickContactBadge与联系人菜单 189 6.3 小结 192 第7章 友好地互动交流——信息提醒(对话框、Toast与Notification)193 7.1 对话框的基本用法 193 7.1.1 带2个按钮(确认/取消)的对话框 193 7.1.2 带3个按钮(覆盖/忽略/取消)的对话框 195 7.1.3 简单列表对话框 196 7.1.4 单选列表对话框 198 7.1.5 多选列表对话框 199 7.1.6 进度对话框 201 7.1.7 登录对话框 205 7.1.8 使用Activity托管对话框 207 7.2 对话框的高级应用 209 7.2.1 阻止单击按钮关闭对话框 209 7.2.2 改变对话框的显示位置 213 7.2.3 在对话框按钮和内容文本中插入图像 215 7.2.4 改变对话框的透明度 216 7.3 Toast 217 7.3.1 Toast的基本用法 217 7.3.2 永不关闭的Toast 218 7.3.3 用PopupWindow模拟Toast提示信息框 221 7.4 通知(Notification) 221 7.4.1 在状态栏上显示通知信息 222 7.4.2 Notification的清除动作 224 7.4.3 永久存在的Notification 225 7.4.4 自定义Notification 226 7.5 小结 227 第8章 移动的信息仓库——数据存储 228 8.1 读写key-value对:SharedPreferences 228 8.1.1 SharedPreferences的基本用法 228 8.1.2 数据的存储位置和格式 229 8.1.3 存取复杂类型的数据 230 8.1.4 设置数据文件的访问权限 233 8.1.5 可以保存设置的Activity:PreferenceActivity 234 8.2 文件存储 238 8.2.1 openFileOutput和openFileInput方法 238 8.2.2 读写SD卡中的文件 239 8.2.3 SAX引擎读取XML文件的原理 241 8.2.4 将XML文件转换成Java对象 242 8.2.5 文件压缩(Jar、Zip) 245 8.3 SQLite数据库 249 8.3.1 SQLite数据库管理工具 249 8.3.2 SQLiteOpenHelper类与自动升级数据库 251 8.3.3 数据绑定与SimpleCursorAdapter类 252 8.3.4 操作SD卡上的数据库 255 8.3.5 将数据库与应用程序一起发布 256 8.3.6 内存数据库 257 8.4 小结 258 第9章 Android中的窗口——Activity 259 9.1 调用其他程序中的Activity 259 9.1.1 直接拨号 259 9.1.2 将电话号传入拨号程序 259 9.1.3 调用拨号程序 260 9.1.4 浏览网页 261 9.1.5 向E-mail客户端传递E-mail地址 261 9.1.6 发送E-mail 261 9.1.7 查看联系人 262 9.1.8 显示系统设置界面(设置主界面、Wifi设置界面) 263 9.1.9 启动处理音频的程序 264 9.2 自定义Activity Action 264 9.3 Activity的高级应用 266 9.3.1 ActivityGroup 266 9.3.2 自定义半透明窗口 268 9.3.3 Activity之间切换的动画效果 269 9.4 小结 270 第10章 全局事件——广播(Broadcast) 271 10.1 什么是广播 271 10.2 接收系统广播 272 10.2.1 短信拦截 272 10.2.2 用代码注册广播接收器 274 10.2.3 广播接收器的优先级 275 10.2.4 来去电拦截 276 10.2.5 截获屏幕休眠与唤醒 280 10.2.6 开机自动运行 281 10.2.7 显示手机电池的当前电量 282 10.3 发送广播 284 10.4 验证广播接收器是否注册 285 10.5 小结 286 第11章 跨应用数据源——Content Provider 287 11.1 Content Provider的作用 287 11.2 获得系统数据 288 11.2.1 读取联系人信息 288 11.2.2 查看收到的短信 290 11.3 自定义Content Provider 291 11.3.1 查询城市信息 291 11.3.2 为Content Provider添加访问权限 297 11.4 小结 298 第12章 一切为用户服务——Service基础与实例 299 12.1 Service基础 299 12.1.1 Service的生命周期 299 12.1.2 绑定Activity和Service 302 12.1.3 开机启动Service 305 12.1.4 判断Service是否已注册 306 12.1.5 判断Service是否已开始 307 12.2 跨进程访问(AIDL服务) 308 12.2.1 什么是AIDL服务 308 12.2.2 建立AIDL服务的步骤 308 12.2.3 建立AIDL服务 308 12.2.4 传递复杂数据的AIDL服务 312 12.2.5 AIDL与来去电自动挂断 317 12.3 小结 319 第13章 做好应用桥梁——网络与通信 320 13.1 WebView控件 320 13.1.1 用WebView控件浏览网页 320 13.1.2 用WebView控件装载HTML代码 322 13.2 访问HTTP资源 324 13.2.1 提交HTTP GET和HTTP POST请求 324 13.2.2 HttpURLConnection类 326 13.2.3 上传文件 327 13.3 客户端Socket 330 13.3.1 连接服务器 331 13.3.2 扫描服务器打开的端口 331 13.3.3 发送和接收数据 333 13.3.4 获得无线路由分配给手机的IP地址 334 13.3.5 设置Socket选项 335 13.4 服务端Socket 339 13.4.1 手机服务器的实现 339 13.4.2 利用Socket在应用程序之间通信 340 13.5 蓝牙通信 342 13.5.1 蓝牙简介 342 13.5.2 打开和关闭蓝牙设备 343 13.5.3 搜索蓝牙设备 344 13.5.4 蓝牙数据传输 346 13.6 小结 351 第14章 炫酷你的应用——多媒体开发 352 14.1 音乐 352 14.1.1 播放音乐 352 14.1.2 录音 353 14.2 视频 354 14.2.1 使用VideoView播放视频 354 14.2.2 使用SurfaceView播放视频 355 14.2.3 录制视频 357 14.3 相机 357 14.3.1 调用系统的拍照功能 358 14.3.2 自定义拍照功能 359 14.4 铃声 364 14.5 小结 366 第15章 2D游戏开发 367 15.1 绘制游戏的画布 367 15.1.1 在View上实现动画效果 367 15.1.2 在SurfaceView上实现动画效果 371 15.2 图形绘制基础 374 15.2.1 绘制像素点 374 15.2.2 绘制直线 374 15.2.3 绘制圆形 375 15.2.4 绘制弧 375 15.2.5 绘制文本 376 15.2.6 综合绘制各种图形 376 15.3 高级图像处理技术 380 15.3.1 绘制位图 380 15.3.2 图像的透明度 382 15.3.3 旋转图像 383 15.3.4 路径 384 15.3.5 Shader的渲染效果 388 15.4 帧(Frame)动画 392 15.4.1 AnimationDrawable与帧动画 392 15.4.2 播放Gif动画 394 15.5 补间(Tween)动画 397 15.5.1 移动补间动画 397 15.5.2 缩放补间动画 399 15.5.3 旋转补间动画 402 15.5.4 透明度补间动画 403 15.6 小结 404 第16章 有趣的Android应用 405 16.1 传感器 405 16.1.1 如何使用传感器 405 16.1.2 加速度传感器(Accelerometer) 409 16.1.3 重力传感器(Gravity) 409 16.1.4 光线传感器(Light) 410 16.1.5 陀螺仪传感器(Gyroscope) 411 16.1.6 方向传感器(Orientation) 411 16.1.7 其他传感器 412 16.2 输入输出技术 413 16.2.1 语音识别 413 16.2.2 手势输入 415 16.2.3 语音朗读(TTS) 417 16.3 Google地图 419 16.4 GPS定位 423 16.5 桌面上的小东西 425 16.5.1 窗口小部件(AppWidget) 425 16.5.2 快捷方式 431 16.5.3 实时文件夹 433 16.6 应用更华丽——动态壁纸 435 16.7 小结 441 第三部分 高级篇 第17章 HTML5与移动Web开发 444 17.1 HTML5简介 444 17.2 HTML5精彩效果演示 445 17.3 HTML5在Android中的应用 447 17.4 HTML5的画布(Canvas) 448 17.4.1 Canvas概述 448 17.4.2 检测浏览器是否支持Canvas 449 17.4.3 在Web页面中使用Canvas 450 17.4.4 使用路径(Path) 452 17.4.5 设置线条风格 453 17.4.6 设置填充类型 453 17.4.7 填充矩形区域 454 17.4.8 使用渐变色(Gradient) 454 17.4.9 拉伸画布对象 455 17.4.10 在Canvas上绘制文本 456 17.4.11 使用阴影 457 17.5 调试JavaScript 458 17.6 小结 459 第18章 输入法开发 460 18.1 Android输入法简介 460 18.2 控制输入法 461 18.3 输入法实战 462 18.3.1 实现输入法的步骤 463 18.3.2 编写输入法程序 463 18.3.3 输入法服务的生命周期 466 18.3.4 预输入文本 467 18.3.5 输入法设置 467 18.4 小结 468 第19章 Android OpenGL ES开发基础 469 19.1 OpenGL简介 469 19.2 什么是OpenGL ES 469 19.3 多边形 470 19.4 颜色 474 19.5 旋转三角形 475 19.6 旋转立方体 477 19.7 小结 478 第20章 OpenGL ES的超酷效果 479 20.1 保持平衡的旋转文本 479 20.2 左右摇摆的Android机器人 482 20.3 纠缠在一起的旋转立方体 485 20.4 透明背景的旋转立方体 486 20.5 触摸旋转的立方体 487 20.6 2D和3D的综合旋转效果 489 20.7 旋转立体天空 491 20.8 小结 493 第21章 Android NDK编程 494 21.1 Android NDK简介 494 21.2 安装、配置和测试NDK开发环境 495 21.2.1 系统和软件要求 495 21.2.2 下载和安装Android NDK 495 21.2.3 下载和安装Cygwin 495 21.2.4 配置Android NDK的开发环境 498 21.3 第一个NDK程序:世界你好 499 21.3.1 编写和调用NDK程序 499 21.3.2 用命令行方式编译NDK程序 501 21.3.3 在Eclipse中集成Android NDK 502 21.4 背景不断变化的三角形(NDK 版OpenGL ES) 504 21.5 使用NDK OpenGL ES API实现千变万化的3D效果 507 21.6 使用NDK调用音频API 510 21.7 本地Activity(Native Activity) 511 21.8 Android NDK配置文件详解 513 21.8.1 Android NDK定义的变量 513 21.8.2 Android NDK定义的函数 514 21.8.3 描述模块的变量 515 21.8.4 配置Application mk文件 516 21.9 小结 516 第22章 测试驱动开发(TDD) 517 22.1 JUnit测试框架 517 22.2 测试Activity 517 22.3 测试Content Provider 521 22.4 测试Service 523 22.5 测试普通类 523 22.6 小结 525 第四部分 综合实例篇 第23章 Android综合案例一——蓝牙聊天 528 23.1 蓝牙聊天主界面 528 23.2 添加选项菜单 530 23.3 搜索和连接蓝牙设备 530 23.4 使设备可被其他蓝牙设备发现 533 23.5 发送和接收聊天信息 533 23.6 小结 537 第24章 Android综合案例二——月球登陆(游戏) 538 24.1 游戏的玩法 538 24.2 实现游戏界面 539 24.3 设置游戏难度 540 24.4 开始游戏 541 24.5 控制飞船喷火 544 24.6 控制飞船改变飞行方向 544 24.7 判断飞船是否成功着陆 545 24.8 小结 546 第25章 Android综合案例三——全键盘输入法(应用) 547 25.1 安装输入法 547 25.2 输入法的初始化工作 548 25.3 响应键盘操作 549 25.4 根据EditText控件的属性显示不同的软键盘 551 25.5 小结 553 第26章 Android综合案例四——贪吃蛇(游戏) 554 26.1 游戏玩法 554 26.2 游戏主界面设计 555 26.3 控制小蛇的移动 557 26.4 小结 560 第27章 Android综合案例五——新浪微博客户端(应用) 561 27.1 新浪微博简介 561 27.1.1 新浪微博客户端 561 27.1.2 新浪微博开放API 563 27.2 使用新浪微博开发API 563 27.3 创建和配置新浪微博客户端工程 564 27.4 登录新浪微博 564 27.5 功能按钮 567 27.6 显示“我的首页”的微博 569 27.7 评论微博 572 27.8 转发微博 573 27.9 写微博 574 27.10 小结 576 第28章 Android综合案例六——笑脸连连看(游戏) 577 28.1 游戏玩法 577 28.2 准备图像素材 578 28.3 实现主界面 578 28.4 随机生成连连看图像 580 28.5 选中两个相同图像后消失 580 28.6 用定时器限制游戏时间 581 28.7 小结 582
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值