练习

原创 2012年03月24日 00:26:01

要求说明书:

1、设置一个默认的布局,命名为show_app_grid.xml

整体是一个RelativeLayout设置背景色为#313849

然后放置三个Layout组成

1、 LinearLayout

a) 高度为28px

b) 布局方向为水平布局

c) 子控件的对齐方式:垂直居中

d) 左边预留5px的空间

e) 设置背景图片为top_bg

f) 包含两个控件

i. ImageView

1. 宽60px

2. 高60px

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、5px

3、 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、全屏显示

requestWindowFeature(Window.FEATURE_NO_TITLE);

getWindow().setFlags(WindowManager.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:listSelector="@drawable/choose_gridview"

     android:numColumns="3" 指定GridView每一行的列数

     android:horizontalSpacing="10px" GridViewitem间的水平间隔

     android:verticalSpacing="10px"   GridViewitem间的垂直间隔

去除title: requestWindowFeature(Window.FEATURE_NO_TITLE);

全屏显示:

1、 获得这个Activity的Window对象

a) Window win = getWindow()

2、 为这个Window对象设置flag

a) win.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN

WindowManager.LayoutParams.FLAG_FULLSCREEN);

为一个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.getInstalledPackages(PackageManager.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.loadLabel(getPackageManager)

2. 获得应用程序的图标(Drawable)

applicationInfo.loadIcon(getPackageManager)

加入加载过程的效果:

当需要显示的项目很多,会造成很大的延迟。这时候屏幕会一直黑屏。给用户很不好的体验。应该在获取信息的时候,显示一些进度信息给用户看,增加用户体验

介绍两种方式

1、 使用ProgressDialog和Handler的使用

a) 多线程:主线程显示ProgressDialog,新线程查询PackageInfo的信息。当新线程查询完毕之后,由handler发送一个消息给主线程,主线程得到消息,将ProgressDialog消失

2、 使用Activity自带的效果,在title栏上显示进度信息

a) requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);//先给Activity注册界面进度条功能

b)  setProgressBarIndeterminateVisibility(true);//在需要显示进度条的时候调用这个方法

c) setProgressBarIndeterminateVisibility(false);//在不需要显示进度条的时候调用这个方法

响应切换用户程序和所有程序的按钮

判断系统程序以及用户安装的程序

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 = true;

}

if (flag) {

appList.add(appInfo);

}

通过查看源代码获得

实现ListView的展现,过程和GridView很相似

在布局文件中加入ListView控件,具体要求如下:

配置id为:lv_apps

高、宽:fill_parent

Item之间的水平间隔和垂直间隔都是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:ellipsize="marquee"

Ellipsize设置出现在什么位置

Visibility属性:visibile

 gone

 invisibile

三者之间的差别

Toast是android用来提示消息的方式,它没有焦点,显示的时间有限,默认的Toast显示比较简单,就是一个TextView。

自定义Toast

每一个Toast中其实都有一个默认的view;我们可以new出一个view,在这个view中设置自己定义的样子,再设置到Toast里面就可以了

响应item点击事件

点击某一项的时候弹出一个Dialog,有启动程序、详细信息、卸载程序三个选项:

在string.xml文件中定义<array>数组

      点击的position和list里面的对象位置是一致的

启动程序:包名+类名

包名:PackageInfo.packageName

         类名:ActivityInfo:PackageInfo.activities[0].name

通过一个Intent:intent.setComponent(new ComponentName(packageName,activityName))

跳转到卸载程序页面:只能通过调用系统卸载界面,不能自己通过代码卸载。

只需要一个URI就可以了

Uri packageURI = Uri.parse("package:" + packageName);

Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);

startActivity(uninstallIntent);

增加动画的效果

1、 控制View的动画 

a) alpha(AlphaAnimation) 

渐变透明

b) scale(ScaleAnimation) 

渐变尺寸伸缩

c) translate(TranslateAnimation)

画面转换、位置移动

d) rotate(RotateAnimation)

画面转移,旋转动画

2、 控制一个Layout里面子View的动画效果

a) layoutAnimation(LayoutAnimationController)

b) gridAnimation(GridLayoutAnimationController)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C++项目练习

  • 2017-09-29 22:51
  • 19.23MB
  • 下载

C语言第七次作业练习

以下程序教材基于 谭浩强C程序设计(第四版)第1题 完成例6.9,有3个字符串,要求找出其中最大者。# include # include int main(void) { ch...

Forntpage练习

  • 2017-09-18 10:59
  • 12KB
  • 下载

javaSE_05Java中方法(函数)与重载、递归-练习

javaSE_05Java中方法(函数)与重载、递归章节练习

黑盒测试用例题练习

  • 2017-09-15 13:38
  • 32KB
  • 下载

[数据存储之二]NSUserDefaults练习

// TestCodingProtocol.h // block练习 #import @interface TestCodingProtocol : NSObject #pragma mark...

AsyncTask小练习

  • 2016-03-28 19:27
  • 6.88MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)