标签归档:Android

制作漂亮的Android应用图标

本文翻译自Android Developers博客
原文:Making Beautiful Android App Icons
作者:Roman Nurik

对于一般用户而言,主屏启动图标(有时候又叫应用图标)会带来用户对该应用的第一印象,随着手机跟平板高分辨率的普及,将应用图标做的精细和高质量就变得比较重要。要做到这样,请确保给你的应用制作XHDPI(320dpi)和XXHDDPI(480dpi)的图标。

在制作应用图标时,除了应用图标指南中的规范外,也请遵循下面这些同样重要的规范:

  • 应用图标为48dp大小的方形,并需要提供MDPI、HDPI、XHDPI与XXHDPI分辨率大小,如果不能全部提供,至少也应该提供XHDPI与XXHDPI分辨率大小;
  • Google Play中展示的512px大小的图标除了展示的小细节之外应该和应用图标保持一致;
  • 应用图标应该专门针对Android进行设计,可参考Pure Android指南中提到的,不要从其他平台照搬视觉元素和样式;
  • 应用图标应该是三维立体的,前视图,俯视时有一定的角度的透视,以便让用户感受到立体的存在;
  • 应用图标应该有明显的轮廓,尽量选择独特的形状,避免使用简单的方形或圆形图标;
  • 总体上应用图标应该简洁明了,但在局部也要有丰富的细节;(例如:精细的边缘效果、渐变、纹理等)
  • 应用图标应该使用浅背景,不要太暗或视觉对比太大,比如图标阴影部分;
  • 应用图标应该包括0dp-3dp的内边距,利用不同的内边距达到视觉上的一致性。

需要注意的是对于平板和大屏幕设备,其对于应用图标分辨率的要求要大于其自身分辨率,应该尽可能提供高分辨率的应用图标。举例来说,如果一个具有XHDPI屏幕的平板,则其对应用图标的要求需要达到XXHDPI级别的分辨率。

Android国内各个市场发布应用总结

时至刚才,这次所发布的各个市场全部通过审核,通过这次的发布过程,可以对国内各大Android市场的状况做一下简单的总结。这次发布的市场分别为:安智、安卓市场、应用汇、智慧云、机锋、N多网、联系乐商店、应用宝、网易应用,基本上涵盖了国内大部分比较主要的Android市场了。

1、从审核效率上

应用汇、机锋、网易应用审核的效率相对较快,安卓市场、智慧云,N多网,联想乐商店、应用宝属于第二梯队,安智审核时间相对最长。

2、从提交便捷性上

基本上提交起来都还算便捷,就是各有风格,基本上都包括填写各部分的资料,个人比较喜欢应用汇、安卓市场、机锋的提交及管理。

3、市场下载归类交互等其他

在所提交的这些市场上,除了联想乐商店没有统计数据外,其他都有统计数据,其中腾讯的应用宝貌似直接给一个1000的下载数,智慧云也会给一个初始下载数,其他市场还算尚可。这里对于N多网的作品归属感觉严重需要修改,将互不相同的作者的app归为同一人所有,这个有点不理解。基本上在发布过程中都会有各市场对于发布app状态的Email回复,安智是没有的,所以要经常自己去看看是否通过审核。一般在审核通过的第一天会有不少的下载数量,这样从一方面告诉我们要经常更新自己的应用。

4、发布要注意的地方

截图一定要认真一点,因为各个市场对于截图审核还都是比较重视的,所以干净的,不带其他相关竞争图标的截图是很关键的,通常使用480×800分辨率,截图不要带机器的外壳,也不要启动豌豆荚等这些无关你应用的其他应用,应该准备png和jpg两种格式的图片,这次修改的很大程度上都因为截图导致审核的延迟。有些市场在提交的时候会过滤敏感数据,所以在提交说描述不规范的时候,请检查描述中是否含有敏感字。

 

—End—

 

App已经发布,等待各市场的审核

最近几天的工作主要在做一个工具类的App,当然是For Android的,iOS的环境都还没有搭建起来,写这个App的缘由是想在这个移动互联网火热的年代,体验一下一款App从开发到最终发布的所有环节,就像写程序一样,光看书获取的是知识,将知识用于实际才算是摄取了知识,毕竟很多时候书本上的东西跟实际是两回事。

这个App在Android开发方面,主要实践了其基本的布局和更改的样式,用到的还是以常见的布局,组件也都是其最基本的,LinearLayout、Button、TextView、ListView、ExpandListView等这些最常见的都应用其中。

从整体的布局上来看,最大的感觉就是好像回到了很久以前设计网页的时代,在一个Layout上嵌套一个Layout,用的熟练了,对于各个基本的布局就可以是说手到拿来,目前充其量也就是熟悉而已。

从样式上来说也进行了一些认识,基本上这个小App中采用9-patch的图片,以设置各组件的background属性来达到美化及统一的样式。

这次放出的版本没有添加任何的广告单元,所以说对于各个广告平台的理解和运用还尚未涉猎,未来可能会进行一些尝试,不过在应用中嵌入广告对于整体的用户体验有所影响。

由于手头没有太多的测试样机,所有对于不同的Android系统版本的体验目前还没有太多的反馈,正在让朋友们试用好给我反馈,从这个角度出发也算是收集一下各个不同版本系统状况,以好在以后的开发中考虑到多版本系统的视觉及操作体验。

总体来说,这次做的App是一个对各个基本组件及基础知识的一个试验及运用,熟悉Android开发的基础知识,接下来可能就需要对于产品的整体结构跟软件架构上进行改进,提炼出来集成的框架,为以后的新的App提供支持的同时也不断的改进升级该App。
名称:生活计算器
版本:1.0.1
功能:装修材料/婴幼保健/医疗/其他
网站:http://www.swaysoft.com
截图:

启动界面

启动界面

 

功能列表

功能列表

Android常见布局之表格布局

表格布局以行列的方式对子组件进行布局,有些类似很多年前网页制作中的表格布局,在Android中的表格布局使用TableLayout,使用TableRow来定义行,在每行中需要布局多个组件的情况下可以采用这种布局方式,也可以使用这种布局方式来达到表格的效果。

其使用的方式为:

1
2
3
4
5
6
7
8
9
10
<TableLayout
     <!-- 一些属性的设置 -->
/>
    <TableRow
       <!-- 属性设置 -->
    >
    <!-- 包含在行中的组件 -->
    </TableRow>
    ...
</TableLayout>

一个简单的登录例子:3行,第一行为登录用户+登录用户录入,第二行为登录密码+登录密码录入,第三行为登录按钮。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<TableLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content">
     <TableRow>
          <TextView android:text="登录用户:" />
          <EditText android:text="" />
     </TableRow>
     <TableRow>
          <TextView android:text="登录密码:" />
          <EditText android:text="" android:password="true" />
     </TableRow>
     <TableRow>
          <Button android:text="登录" />
     </TableRow>
</TableLayout>

TableLayout的比较常用的属性有collapseColumns,stretchColumns,shrinkColumns

collapseColumns 主要用于隐藏TableRow中的列,以0开始,如需隐藏多列,则以逗号分隔;

stretchColumns主要用于拉伸TableRow中的列,以0开始,多列以逗号分隔,如果本身已经没有空间里,则该属性不起作用

shrinkColumns主要用于伸缩TableRow中的列,以0开始,多列以逗号分隔,如果空间没有充满布局,则该属性不起作用,如果行空间充满布局,则设置该属性的列则垂直以内容填充

使用常见的属性,修改上面的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<TableLayout
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:stretchColumns="1"    <!-- 增加,将第二列拉伸 -->
     android:collapseColumns="2">  <!-- 隐藏第二列 隐藏*内容-->
     <TableRow>
          <TextView android:text="登录用户:" /> 
          <EditText android:text="" />
          <TextView android:text="*" android:textColor="#FF0000" />
     </TableRow>
     <TableRow>
          <TextView android:text="登录密码:" />
          <EditText android:text="" android:password=“true" />
     </TableRow>
     <TableRow>
          <Button android:text="登录" />
     </TableRow>
</TableLayout>

最终运行效果如下图所示:

Android常见布局之线性布局

Android中比较常见的布局有线性布局(LinearLayout),表格布局(TableLayout),相对布局(RelativeLayout)及帧布局(FrameLayout)。

线性布局是将其中的组件按照线性的,以垂直或者水平方向来布局,组件的布局方向可由orientation属性来控制,其具体值有水平(horizontal)及垂直(vertical)。搞清楚布局以后,这玩意就的思考加练习,以各种方式在纸上进行画,或者在心里画,然后编写布局文件来练习,时间长了就自然而然的熟练了。

练习要求:

1、把屏幕分成2部分,上面一部分,下面一部分

2、上面部分分为4列

3、下面部分分为4行

OK,开始练习!(在Eclipse中建立项目测试Layout,修改其res目录下的layout目录中的main.xml文件)

第一步:考虑LinearLayout使用数目,并确定其方向,由于是分为上下两部分,所以最外层layout采用垂直方向布局,里面两个layout分别表示上下;

<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <LinearLayout>   <!-- 上面部分 -->
    </LinearLayout>
    <LinearLayout>   <!-- 下面部分 -->
    </LinearLayout>
 </LinearLayout>

第二步:补充内部layout属性及增加组件,这里用TextView组件来填充LinearLayout,不断补充调整,最终布局文件如下:

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:orientation="vertical"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent">
     <LinearLayout android:orientation="horizontal"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1">
            <TextView
                 android:text="col1"
                 android:gravity="center_horizontal"
                 android:background="#999999"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent" 
                 android:layout_weight="1" />
            <TextView
                 android:text="col2"
                 android:gravity="center_horizontal"
                 android:background="#290fc0"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" />
            <TextView
                 android:text="col3"
                 android:gravity="center_horizontal"
                 android:background="#999999"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" />
            <TextView
                 android:text="col4"
                 android:gravity="center_horizontal"
                 android:background="#290fc0"
                 android:layout_width="wrap_content"
                 android:layout_height="fill_parent"
                 android:layout_weight="1" /> 
     </LinearLayout>
     <LinearLayout
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:layout_weight="1">
         <TextView
              android:text="row_one"
              android:textSize="15sp"
              android:background="#290fc0"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
         <TextView
              android:text="row_two"
              android:textSize="15sp"
              android:background="#999999"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
         <TextView
              android:text="row_three"
              android:textSize="15sp"
              android:background="#290fc0"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
          <TextView
              android:text="row_four"
              android:textSize="15sp"
              android:background="#999999"
              android:layout_width="fill_parent"
              android:layout_height="wrap_content"
              android:layout_weight="1" />
     </LinearLayout>
</LinearLayout>

运行效果如下图所示:

LinearLayout