A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 王震阳老师 于 2015-4-7 14:22 编辑











汇总贴:http://bbs.itheima.com/thread-180149-1-1.html
pdf附件回复可下载:
游客,如果您要查看本帖隐藏内容请回复


Android-通知&Fragment&反编译&NinePatch

1. 通知(★★★
通知用于在状态栏显示消息,消息到来时以图标方式表示,如果需要查看消息,可以拖动状态栏到屏幕下方即可查看消息,在Android中通过通知管理器NotificationManager来发出或关闭一个通知。
使用步骤:
  • 获取通知管理器对象
  • 如何发出一个通知
  • 如何关闭通知

  • 通知的效果如下
点击通知,会跳转到指定页面。
注意:
  • 若设置了弹出通知会有声音/震动/亮灯的效果,注意添加对应权限,否则会抛
错比如,设置震动需加权限android.permission.VIBRATE
2.获取延期意图PendingIntent时,封装的意图对象必须采用隐式的方式
2. 反编译(
Android打包好的APK如果直接解压缩,那么里面的布局文件和字节码文件如法直接使用,但是我们可以通过以下三个反编译工具对一个APK进行反编译。
1.apktool   反编译布局文件, 反编译之后会在apk相同的目录下创建一个
命令:apktool d xxx.apk
  • dex2jar 把.dex文件转换成.jar的文件, 会在相同目录下生成一个
xxx.jar
命令:dex2jar xxx.dex
3.jd-gui 查看jar文件
3. NinePatch(3.1什么是NinePatch图片
NinePatch是一种很有用的PNG图片文件夹      
格式,它可以在特定区域随文字大小进行缩放
上图中背景图片的中间区域会随着文字的大小进行缩放背景图片就是一张NinePatch图片。
3.2如何制作NinePatch图片
NinePatch图片可以使用android自带的draw9patch工具来制作,该工具在SDK安装路径的tools目录下
打开“sdk\tools\draw9patch.bat”,执行此工具然后点击“File”->“open 9-path”打开一张用于制作NinePatch图片的原图,通过在画布的四边画线来指定缩放区域和文字所在区域。
画布的左边和上边是控制图片拉伸的;画布的右边和底边是控制内容显示的区域的
使用鼠标左键点击拖动来画线,使用鼠标右键点击拖动才擦除线条
点击File,点击保存,就会生成后缀名为”.9.png”格式的图片
3.3 使用NinePatch图片做背景的效果
通过设置android:background="@drawable/bg"属性来设置背景图片,使用一般图片作为背景和使用NinePatch图片做背景的效果对比。
4. Fragment(★★★★4.1什么是Fragment
Fragment就是小型的Activity,它是在Android3.0时出现的。
Fragment是表现Activity中UI的一个行为或者一部分。可以把fragment想象成activity的一个模块化区域,有它自己的生命周期,接收属于它自己的输入事件,并且可以在activity运行期间添加和删除(有点像一个可以在不同的activity中重用的“子Activity”)。
Fragment必须被嵌入到一个activity中。它们的生命周期直接受其宿主activity的生命周期影响。当一个activity正在运行时,就可以独立地操作每一个Fragment,比如添加或删除它们。
Fragment可以定义自己的布局、生命周期回调方法,因此可以将fragment重用到多个activity中,因此可以根据不同的屏幕尺寸或者使用场合改变fragment组合。
4.2如何创建一个Fragment
  • 为Fragment定义一个布局
  • 定义类继承Fragment
  • 重写类中的onCreateView方法,返回一个View对象作为当前Fragment的布局
fragment第一次绘制它的用户界面的时候,系统会调用onCreateView()方法。为了绘制fragment的UI,此方法必须返回一个作为fragment布局的根的view。如果fragment不提供UI,可以返回null。
4.3如何将Fragment添加到Activity
Activity必须在清单文件中进行声明,但是Fragment不需要,Fragment只需要在Activity的布局文件中声明就可以了。
注意:代码中的四个属性是必须的要给的,“android:name”属性:指定了在layout中实例化的Fragment类是哪个。
当系统创建这个activity layout时,它实例化每一个在layout中指定的Fragment,并调用它们的onCreateView()方法,来获取每一个Fragment的layout,系统将从Fragment返回的View 直接插入到<fragment>元素所在的地方
每一个fragment都需要一个唯一的标识,如果activity重启,系统可以用来恢复Fragment,并且可以用id来捕获Fragment来处理事务,例如移除它。
有3种方法来为一个fragment提供一个ID:
为android:id属性提供一个唯一ID;
为android:tag属性提供一个唯一字符串;
如果以上2个你都没有提供,系统将使用容器view的ID;
4.4如何切换Fragment
  要在activity中管理Fragment,需要使用FragmentManager可以通过调用activity的getFragmentManager()取得它的实例。
案例:点击不同的按钮切换到不同的Fragment进行显示
步骤:
  • 设置布局文件:添加三个按钮用于切换Fragment,并在按钮下方添加一个FrameLayout用来替换成响应的Fragment
  • 创建三个FragmentSportsFragment、NewsFragment、GameFragment。
其余两个Fragment跟SportsFragment代码一致,只是布局文件不同。
  • 添加切换Fragment的逻辑
sports()方法、games()方法同上,因此不再给出代码清单。
  • 运行程序,效果如下
4.5 Fragment的生命周期
Fragment的生命周期和activity生命周期很像。
onAttach:绑定到activity
onCreate:创建fragment
    onCreateView: 创建fragment的布局
   onActivityCreated: activity创建完成后
   onStart: 可见, 不可交互
    onResume: 可见, 可交互
    onPause: 部分可见, 不可交互
    onStop:不可见
    onDestroyView: 销毁fragment的view对象
    onDestroy: fragment销毁了
    onDetach: 从activity解绑了
4.6 Fragment的向下兼容
Fragment是在Android 3.0才推出的,若想在3.0的低版本下使用Fragment,则需要执行下面2步:
  • 把所有Fragment和FragmentManager改成support-v4包下的类
  • 把Activity的继承改为FragmentActivity(support-v4包下的)
4.7 Fragment之间的通信案例
案例:创建一个用于显示选项卡的Fragment和一个用于显示内容的Fragment,当
选项卡切换时,使内容的Fragment信息跟着一起切换。
步骤:
  • 先创建选项卡Fragment和内容Fragment,并在activity_main.xml布局文件中进行设置,其布局效果如下:
  • 为选项卡Fragment创建布局文件,其布局效果如下:
  • 添加内容区域Fragment的代码逻辑
  • 添加选项卡区域Fragment的代码逻辑
  • 运行程序,效果如下:


至此,本文档完!


2014年12月26日星期五 0:49:31
北京市海淀区东北旺中路东馨园

207 个回复

正序浏览
总结的内容很全面啊
回复 使用道具 举报
表示现在没到这个地步有点看不懂
回复 使用道具 举报
已收藏,自己研究哈
回复 使用道具 举报
赞一个...
回复 使用道具 举报
下载看看
回复 使用道具 举报
非常给力!
回复 使用道具 举报
非常给力!
回复 使用道具 举报
一直关注哈哈哈....
回复 使用道具 举报
阳哥威武
回复 使用道具 举报
MrFly 初级黑马 2015-12-22 02:29:48
184#
支持支持还是支持哈哈哈哈
回复 使用道具 举报
汇总贴让我找到了方向
回复 使用道具 举报
谢谢分享啦   很有用
回复 使用道具 举报
··············good
回复 使用道具 举报
好东西1!!!!!
回复 使用道具 举报
就业ban一个月了  安卓噶
回复 使用道具 举报
感谢阳哥.  非常需要...谢谢....
回复 使用道具 举报
赞~~~~~~~
回复 使用道具 举报
太给了!
回复 使用道具 举报
牛逼啦呀                        
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马