【Android源码 栏目提醒】:以下是网学会员为您推荐的Android源码 -[Android项目视频教程]软件管理器的开发_日志 - 其它资料,希望本篇文章对您学习有所帮助。
要求说明书: 1、设置一个默认的布局,命名为 show_app_grid.xml整体是一个 RelativeLayout 设置背景色为313849然后放置三个 Layout 组成1、 LinearLayout a 高度为 28px b 布局方向为水平布局 c 子控件的对齐方式:垂直居中 d 左边预留 5px 的空间 e 设置背景图片为 top_bg f 包含两个控件 i. ImageView 1. 宽 18px 2. 高 18px 3. 图片:manage ii. TextView 1. 高:wrap_content 2. 高:wrap_content 3. 颜色:000 4. 大小:14px 5. 显示文字为:应用程序2、 GridView a 配置 id 为:gv_apps b 高、宽:fill_parent c 列数:3 d Item 之间的水平间隔和垂直间隔都是 10px e 当 item 选中时显示的图片为 choose_gridview f 距离父窗体的上下左右距离分别为 28px、58px、5px、5px3、 RelativeLayout a 宽:fill_parent b 高:58px c 紧靠父控件底部 d 背景图片:bottom_bg e 有两个 ImageButton i. 设置 id 分别为:ib_change_view 和 ib_change_category ii. 一个紧靠左边,一个紧靠右边 iii. 距离父窗体:5px、1px iv. 图片分别为 list 和 all v. 宽高为别为:76px 和 54px 2、建立 AppExplorerActivity.java 去除Title、全屏显示 requestWindowFeatureWindow.FEATURE_NO_TITLE getWindow.setFlagsWindowManager.LayoutParams.FLAG_FULLSCREEN WindowManager.LayoutParams.FLAG_FULLSCREEN 显示所有软件信息 1、 新建gv_item.xml为每一个item指定布局 a LinearLayout i. 高:wrap_content ii. 宽:90px iii. 布局方向:垂直 iv. 设置里面的空间的位置为中间 v. ImageView 1. 设置id为gv_item_icon 2. 宽高都为64px vi. TextView 1. 设置id为gv_item_appname 2. 宽高都为wrap_content 3. 设置为2行 4. 字体大小16px 5. 颜色FFF 2、 建立GridViewAdapter 3、 建立ViewHolder用来存放每一个item里的view 4、 建立一个ArrayList用于放置获得所有的PackageInfo小结:
android:paddingLeft:指的是在本控件中,预留闲置多少空间
android:layout_marginLeft:指的是这个控件距离父控件的空间有多少 当GridView中的一项被点中的时候显示的背景图片:
android:listSelectordrawable/choose_gridview
android:numColumns3 指定GridView每一行的列数
android:horizontalSpacing10px GridView中item间的水平间隔
android:verticalSpacing10px GridView中item间的垂直间隔 去除title:requestWindowFeatureWindow.FEATURE_NO_TITLE 全屏显示: 1、 获得这个Activity的Window对象 a WindowwingetWindow 2、 为这个Window对象设置flag a win.setFlagsWindowManager.LayoutParam s.FLAG_FULLSCREEN WindowManager.LayoutParams.FLAG_FULLSC REEN为一个GridView设置适配器的过程1、 为GridView的每一项准备一个布局文件2、 写一个类继承BaseAdapter i. 解释:一个类继承了BaseAdapter,需要重写几个方 法,分别是getCount、getItem、 getItemId、getView ii. 最重要的是getCount和getView方法。
GridView 中的每一项都是一个View。
而这个View是通过 getView获得的。
当某一项需要显示的时候,它就会 调用adapter中的getView方法获得需要展示的 view。
所以,这个GridView中有几项,就会调用几 次getView方法,判断有几项,是通过getCount方 法获得。
所以在getCount中我们应该返回一个list 的大小。
在getView中,根据参数position获得 list中位于position的某一个对象。
通过 LayoutInflater将布局文件渲染成一个view,再 给这个view中的控件赋值3、 关于PackageInfo a 获得系统中所有安装程序的信息,包括用户安装的和系统 本身的: i. 获得PackageManager pm getPackageManager ii. List list pm.getInstalledPackagesPackageManager .GET_UNINSTALLED_PACKAGES b PackageInfo封装了什么信息:可以理解为 PackageInfo对应着一个Manifest文件, PackageInfo将Minifest的文件进行了封装 i. 包名:packageName ii. 版本信息:versionCode、versionName iii. 这个包中的activity的信息 iv. 这个包中receiver的信息 v. 这个包中provider的信息 vi. 这个包中service的信息 都封装成xxxInfo,通过 这个就可以得到相应的信息 vii. 还有可以获得applicationInfo 1. 获得应用程序的名称 applicationInfo.loadLabelgetPackage Manager 2. 获得应用程序的图标Drawable applicationInfo.loadIcongetPackageM anager加入加载过程的效果: 当需要显示的项目很多,会造成很大的延迟。
这时候屏幕会一直黑屏。
给用户很不好的体验。
应该在获取信息的时候,显示一些进度信息给用户看,增加用户体验 介绍两种方式 1、 使用ProgressDialog和Handler的使用 a 多线程:主线程显示ProgressDialog,新线程查询 PackageInfo的信息。
当新线程查询完毕之后,由 handler发送一个消息给主线程,主线程得到消息,将 ProgressDialog消失 2、 使用Activity自带的效果,在title栏上显示进度信息 a requestWindowFeatureWindow.FEATURE_INDE TERMINATE_PROGRESS//先给Activity注册界面 进度条功能 b setProgressBarIndeterminateVisibilityt rue//在需要显示进度条的时候调用这个方法 c setProgressBarIndeterminateVisibilityfa lse//在不需要显示进度条的时候调用这个方法响应切换用户程序和所有程序的按钮 判断系统程序以及用户安装的程序if appInfo.flags ApplicationInfo.FLAG_UPDATED_SYSTEM_APP 0 // Updated system app flag true else if appInfo.flags ApplicationInfo.FLAG_SYSTEM 0 // Non-system app flag trueif flag appList.addappInfo通过查看源代码获得实现ListView的展现,过程和GridView很相似 在布局文件中加入ListView控件,具体要求如下:配置id为:lv_apps高、宽:fill_parentItem之间的水平间隔和垂直间隔都是10px当item选中时显示的图片为choose_gridview距离父窗体的上下左右距离分别为28px、58px、5px、5px设置为不可见 为ListView的每一项,写一个布局文件。
lv_item.xml 整体是一个LinearLayout, 1、 布局方向为水平布局, 2、 宽fill_parent 3、 高wrap_content 4、 内容的方向垂直居中 5、 ImageView a Id为lv_icon b 距离父控件的顶部和底部都是5px c 宽、高48px 6、 LinearLayout a 布局方向为垂直布局 b 宽wrap_content c 高48px d 左边预留5px的距离 e TextView i. Id为lv_item_appname ii. 宽fill_parent iii. 高wrap_content iv. 单行显示 v. 字体大小16px vi. 字体样式:加粗 vii. 字体颜色:fff f TextView i. Id为lv_item_packagenam ii. 宽fill_parent iii. 高wrap_content iv. 单行显示 v. 字体颜色fff属性
android:ellipsizemarqueeVisibility属性:visibile gone invisibile 三者之间的差别Toast是
android用来提示消息的方式,它没有焦点,显示的时间有限,默认的Toast显示比较简单,就是一个TextView。
自定义Toast 每一个Toast中其实都有一个默认的view;我们可以new出一个view,在这个view中设置自己定义的样子,再设置到Toast里面就可以了响应item点击事件 点击某一项的时候弹出一个Dialog有启动程序、详细信息、卸载程序三个选项: 在string.xml文件中定义数组 点击的position和list里面的对象位置是一致的启动程序:包名类名 包名:PackageInfo.packageName 类名:ActivityInfo:PackageInfo.activities0.name通过一个Intent:intent.setComponentnewComponentNamepackageNameactivityName跳转到卸载程序页面:只能通过调用系统卸载界面,不能自己通过代码卸载。
只需要一个URI就可以了Uri packageURI Uri.parsepackage: packageName Intent uninstallIntent newIntentIntent.ACTION_DELETE packageURI startActivityuninstallIntent增加动画的效果1、 控制View的动画 a alphaAlphaAnimation 渐变透明 b scaleScaleAnimation 渐变尺寸伸缩 c translateTranslateAnimation 画面转换、位置移动 d rotateRotateAnimation 画面转移,旋转动画2、 控制一个Layout里面子View的动画效果 a layoutAnimationLayoutAnimationController b gridAnimationGridLayoutAnimationController