当前位置: 编程技术>移动开发
本页文章导读:
▪批改listView滑块图片 修改listView滑块图片
上一篇介绍了快速滚动,假如在开发过程中需要修改滚动时的图片,该怎么实现呢?通篇查看了ListView及其超累AbsListView,都未找到自定义图片的设置接口。看来是没打.........
▪ APP的树丛竞争法则 APP的丛林竞争法则
上周在美国举行的苹果全球开发者大会(WWDC),可谓苹果开发者的盛会。乔布斯在会上提到,后PC时代网络服务的前景,将为开发者设计新程序提供了广阔空间。结合此前5.........
▪ 怎么在程序中获取系统语言及修改Value-的语言 如何在程序中获取系统语言及修改Value-的语言
很多开发者考虑使自己的Android程序兼容多国语言,其实Google在设计Android时已经考虑了本地化问题,通过定义相关的资源可以自适应当前手机.........
[1]批改listView滑块图片
来源: 互联网 发布时间: 2014-02-18
修改listView滑块图片
上一篇介绍了快速滚动,假如在开发过程中需要修改滚动时的图片,该怎么实现呢?
通篇查看了ListView及其超累AbsListView,都未找到自定义图片的设置接口。看来是没打算让开发者更改了。但是用户要求我们自定义这个图片。那只能用非常手段了。
经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。
因此反射代码写的稍微麻烦一些:
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
f.setAccessible(true);
Object o=f.get(listView);
f=f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable=(Drawable) f.get(o);
drawable=getResources().getDrawable(R.drawable.icon);
f.set(o,drawable);
Toast.makeText(this, f.getType().getName(), 1000).show();
} catch (Exception e) {
throw new RuntimeException(e);
}
这样就可以改变默认的滑块图片了。
上一篇介绍了快速滚动,假如在开发过程中需要修改滚动时的图片,该怎么实现呢?
通篇查看了ListView及其超累AbsListView,都未找到自定义图片的设置接口。看来是没打算让开发者更改了。但是用户要求我们自定义这个图片。那只能用非常手段了。
经过分析发现,该图片是ListView超类AbsListView的一个成员mFastScroller对象的成员mThumbDrawable。这里mThumbDrawable是Drawable类型的。mFastScroller是FastScroller类型,这个类型比较麻烦,类的声明没有modifier,也就是default(package),只能供包内的类调用。
因此反射代码写的稍微麻烦一些:
try {
Field f = AbsListView.class.getDeclaredField("mFastScroller");
f.setAccessible(true);
Object o=f.get(listView);
f=f.getType().getDeclaredField("mThumbDrawable");
f.setAccessible(true);
Drawable drawable=(Drawable) f.get(o);
drawable=getResources().getDrawable(R.drawable.icon);
f.set(o,drawable);
Toast.makeText(this, f.getType().getName(), 1000).show();
} catch (Exception e) {
throw new RuntimeException(e);
}
这样就可以改变默认的滑块图片了。
[2] APP的树丛竞争法则
来源: 互联网 发布时间: 2014-02-18
APP的丛林竞争法则
上周在美国举行的苹果全球开发者大会(WWDC),可谓苹果开发者的盛会。乔布斯在会上提到,后PC时代网络服务的前景,将为开发者设计新程序提供了广阔空间。结合此前5月6日,iPad2在大陆公开发售,全国各地苹果专卖店前“果粉”排长队等待购买的火爆场景再度上演。智能移动设备的热销和流行,这对于移动APP开发者来说,无疑是个福音。
但事实真的有这么美好吗?行业的热火朝天,并不意味着每一个参与者都能获益。移动APP开发者特别是中小开发者,正在行业欢呼声中承受着不堪的重负,症状主要表现如下。
第一,参与者快速增长,竞争急速加剧。据移动互联网研究机构艾媒提供的数据,2010年全球Android开发者数量达68.9万名,同比增长241%。预计到2012年,Android开发者数量将飙升至220.8万名,而届时全球iPhone APP Store开发者将达到84.7万名,而iPad的APP Store开发者也将达10.9万名。更为有趣的是,中国市场已出现苹果APP开发者培训班。培训班的出现,意味着将会有海量的中小开发者涌现。
第二,收费困难。国内某知名视频网站的3G产品经理提到,虽然移动、联通、电信等运营商都推出APP应用商城,但它们对应用收费根本没信心,而是紧盯流量费,将精力放在策划各式流量套餐,而应用及其上面的相关版权内容都免费。在流量费面前,运营商并没有足够的热情对商店里的APP收费。而对中国的消费者来说,付费习惯尚未养成。这对于资金实力不强的中小开发者来说,无疑是个尴尬的信息。
第三,能赚钱的APP凤毛麟角。艾媒提供的数据显示,中国的手机应用软件开发者70.1%处于亏损状态,盈利者占13.7%;年收入10万以上仅占14.7%,超过50%的开发者年收入在1万元以下。高收入榜单中,大部分是有实力的大公司。
从上面罗列的几点可以看出,在强大产业浪潮推动下,抱着满腔热情和无限憧憬加入的中小APP开发者,数量庞大,是行业的金字塔底座。他们为行业贡献了丰富的应用,却大多数无法获得有意义的收入,靠着理想主义情怀苦苦支撑。
虽然困难,但大量中小开发者前赴后继入行是不可避免的大趋势,问题是,如何避免成为产业前进征途中的炮灰?笔者在此整理几点思路,供参考。
思想上,要端正。
首先要远离神话。不要沉迷于那些上架三月便收入数百上千万美金的传奇财富故事,这些只是小概率事件。其次要拒绝平凡。大部分APP成为炮灰的原因在于产品属于大众化娱乐产品,特色不鲜明,没有门槛,很多公司都能开发。2011年初,有统计数据显示,苹果App Store中有35万款应用,Android仅有25万款应用。在千军万马激烈厮杀的APP江湖中,平凡的APP想要流行,必须有强大的推广能力,非中小开发者所能为之。
模式上,要力所能及的。
不要轻易尝试免费模式。对中小开发者来说,免费模式是个美丽的陷阱。很多做互联网的人迷信“免费+增值服务”模式。这个模式成立的前提是,要有足够多的用户。但积累足够多用户的过程中,需要大量的资金。有人形容这种模式是:要赚钱,必须先足够有钱。这种有钱人模式中小开发者同样玩不起。
产品上,要能快速收钱。
做游戏。大众化娱乐产品中,有个例外,就是游戏。游戏不单是娱乐产品中数量最多的,也是所有APP中数量最多的。这是APP中最大的需求,用户付费意愿最强。
做特色系统化应用。开发纯软件技术产品,大公司很容易模仿,也很喜欢模仿。如能结合具体的传统行业,开发专门的行业化应用,则核心竞争力强,用户群精准,推广途径明确。比如,车联网正随着私家车保有量增多而成为新的移动互联网分支,但汽车和互联网的连接还有很多障碍,而通过特定的手机APP作为中间件,便能很好地将它们连接起来。且对于能解决特定现实问题的APP,用户同样有较高的付费意愿。
做海外市场。海外市场特别是欧美市场的特点是用户有良好的付费习惯,有较为完善的版权保护环境。据传国内iPhone开发者所做的应用产品大部分销往国外。当然,此模式的前提是开发者要有分析海外用户需求的能力。国内知名的APP开发公司博看文思便在美国设立分公司分析用户需求。对于中小开发者来说,这比较难。它适合海归人群,他们通常在国外有同学朋友、公司可以进行合作。
当然,思路还有很多,笔者在此只是抛砖引玉。
最后一句话,中小APP开发者,必须要清醒地明确行业境况和自身的优劣势,在此基础上选择适合自己的方法和路径寻求突围,才有可能冲出重围。
上周在美国举行的苹果全球开发者大会(WWDC),可谓苹果开发者的盛会。乔布斯在会上提到,后PC时代网络服务的前景,将为开发者设计新程序提供了广阔空间。结合此前5月6日,iPad2在大陆公开发售,全国各地苹果专卖店前“果粉”排长队等待购买的火爆场景再度上演。智能移动设备的热销和流行,这对于移动APP开发者来说,无疑是个福音。
但事实真的有这么美好吗?行业的热火朝天,并不意味着每一个参与者都能获益。移动APP开发者特别是中小开发者,正在行业欢呼声中承受着不堪的重负,症状主要表现如下。
第一,参与者快速增长,竞争急速加剧。据移动互联网研究机构艾媒提供的数据,2010年全球Android开发者数量达68.9万名,同比增长241%。预计到2012年,Android开发者数量将飙升至220.8万名,而届时全球iPhone APP Store开发者将达到84.7万名,而iPad的APP Store开发者也将达10.9万名。更为有趣的是,中国市场已出现苹果APP开发者培训班。培训班的出现,意味着将会有海量的中小开发者涌现。
第二,收费困难。国内某知名视频网站的3G产品经理提到,虽然移动、联通、电信等运营商都推出APP应用商城,但它们对应用收费根本没信心,而是紧盯流量费,将精力放在策划各式流量套餐,而应用及其上面的相关版权内容都免费。在流量费面前,运营商并没有足够的热情对商店里的APP收费。而对中国的消费者来说,付费习惯尚未养成。这对于资金实力不强的中小开发者来说,无疑是个尴尬的信息。
第三,能赚钱的APP凤毛麟角。艾媒提供的数据显示,中国的手机应用软件开发者70.1%处于亏损状态,盈利者占13.7%;年收入10万以上仅占14.7%,超过50%的开发者年收入在1万元以下。高收入榜单中,大部分是有实力的大公司。
从上面罗列的几点可以看出,在强大产业浪潮推动下,抱着满腔热情和无限憧憬加入的中小APP开发者,数量庞大,是行业的金字塔底座。他们为行业贡献了丰富的应用,却大多数无法获得有意义的收入,靠着理想主义情怀苦苦支撑。
虽然困难,但大量中小开发者前赴后继入行是不可避免的大趋势,问题是,如何避免成为产业前进征途中的炮灰?笔者在此整理几点思路,供参考。
思想上,要端正。
首先要远离神话。不要沉迷于那些上架三月便收入数百上千万美金的传奇财富故事,这些只是小概率事件。其次要拒绝平凡。大部分APP成为炮灰的原因在于产品属于大众化娱乐产品,特色不鲜明,没有门槛,很多公司都能开发。2011年初,有统计数据显示,苹果App Store中有35万款应用,Android仅有25万款应用。在千军万马激烈厮杀的APP江湖中,平凡的APP想要流行,必须有强大的推广能力,非中小开发者所能为之。
模式上,要力所能及的。
不要轻易尝试免费模式。对中小开发者来说,免费模式是个美丽的陷阱。很多做互联网的人迷信“免费+增值服务”模式。这个模式成立的前提是,要有足够多的用户。但积累足够多用户的过程中,需要大量的资金。有人形容这种模式是:要赚钱,必须先足够有钱。这种有钱人模式中小开发者同样玩不起。
产品上,要能快速收钱。
做游戏。大众化娱乐产品中,有个例外,就是游戏。游戏不单是娱乐产品中数量最多的,也是所有APP中数量最多的。这是APP中最大的需求,用户付费意愿最强。
做特色系统化应用。开发纯软件技术产品,大公司很容易模仿,也很喜欢模仿。如能结合具体的传统行业,开发专门的行业化应用,则核心竞争力强,用户群精准,推广途径明确。比如,车联网正随着私家车保有量增多而成为新的移动互联网分支,但汽车和互联网的连接还有很多障碍,而通过特定的手机APP作为中间件,便能很好地将它们连接起来。且对于能解决特定现实问题的APP,用户同样有较高的付费意愿。
做海外市场。海外市场特别是欧美市场的特点是用户有良好的付费习惯,有较为完善的版权保护环境。据传国内iPhone开发者所做的应用产品大部分销往国外。当然,此模式的前提是开发者要有分析海外用户需求的能力。国内知名的APP开发公司博看文思便在美国设立分公司分析用户需求。对于中小开发者来说,这比较难。它适合海归人群,他们通常在国外有同学朋友、公司可以进行合作。
当然,思路还有很多,笔者在此只是抛砖引玉。
最后一句话,中小APP开发者,必须要清醒地明确行业境况和自身的优劣势,在此基础上选择适合自己的方法和路径寻求突围,才有可能冲出重围。
[3] 怎么在程序中获取系统语言及修改Value-的语言
来源: 互联网 发布时间: 2014-02-18
如何在程序中获取系统语言及修改Value-的语言
很多开发者考虑使自己的Android程序兼容多国语言,其实Google在设计Android时已经考虑了本地化问题,通过定义相关的资源可以自适应当前手机的语言来加载响应的资源文件。Android开发网列出主流的本地化:
语言自适应
在Android工程的res目录下,通过定义特殊的文件夹名称就可以实现,比如我们的程序兼容 简体中文、日文、英文、法文和德文,常规的字符strings.xml保存的目录在values文件夹中,这里我们就需要定义 values-zh-rCN、values-ja、values、values-fr和values-de。当然如果涉及到参数配置类xml文件夹也要改成xml-zh、xml-ja、xml、xml-fr和xml-de。
当然我们用代码如何获取本机的语言类型呢? 通过代码 :
String cwjLocale = getResources().getConfiguration().locale.getCountry(); 即可获取,其中cwjLocale保存了国家代码,这些定义在java.util.Locale的字段中,直接对比即可,比如我们英文版固件设备为US。
当然我们需要测试,可能会强制加载某国语言,可以使用在Activity的SetContentView之前调用,比如强制简体中文,代码如下:
Resources resources = getResources();
Configuration config = resources.getConfiguration();
config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
DisplayMetrics dm = res.getDisplayMetrics();
resources.updateConfiguration(config, dm);
屏幕分辨率自适应
这里我们需要判断两种大体情况,屏幕的方向,比如常规的纵向port和横屏land,我们定义的图片资源为
layout或drawable,而横屏情况下位layout-land和drawable-land,当然还有一种情况就是分辨率。
目前Android手机分辨率有
HVGA (320x480) 的G1、G2、G3 对应标准的 drawable-mdpi
QVGA (240x320) 的G4 ,对应 drawable-ldpi
WVGA (480x800) 的N1,对应 drawable-hdpi 。
最终我们以MMS应用的例子,对应res文件夹的摆放如图:
1.首先,如果要程序自动适应系统语言进行转变,可以在res下添加相应的语言文件夹:如:添加中文,则文件夹命名为values-zh-rCN,如果不清楚需要的名字可以到:E:\android-sdk-windows\platforms\android-8\data\res,如这样的文件夹下寻找。这样就可以让程序自动适应系统的语言来选择语言。
2.如果我们想在程序内部可以手动地选择语言则:
a.首先获得当前的语言或者国家:
String able= getResources().getConfiguration().locale.getCountry();
b.进行判断:如果是中文则返回的able.equals("CN")
c.进行设置的代码为:
//选择中文
Configuration config = getResources().getConfiguration();
DisplayMetrics dm = getResources() .getDisplayMetrics();
config.locale = Locale.SIMPLIFIED_CHINESE;
getResources().updateConfiguration(config, dm);
d.最后用sharedPreferences保存当前的语言设置
很多开发者考虑使自己的Android程序兼容多国语言,其实Google在设计Android时已经考虑了本地化问题,通过定义相关的资源可以自适应当前手机的语言来加载响应的资源文件。Android开发网列出主流的本地化:
语言自适应
在Android工程的res目录下,通过定义特殊的文件夹名称就可以实现,比如我们的程序兼容 简体中文、日文、英文、法文和德文,常规的字符strings.xml保存的目录在values文件夹中,这里我们就需要定义 values-zh-rCN、values-ja、values、values-fr和values-de。当然如果涉及到参数配置类xml文件夹也要改成xml-zh、xml-ja、xml、xml-fr和xml-de。
当然我们用代码如何获取本机的语言类型呢? 通过代码 :
String cwjLocale = getResources().getConfiguration().locale.getCountry(); 即可获取,其中cwjLocale保存了国家代码,这些定义在java.util.Locale的字段中,直接对比即可,比如我们英文版固件设备为US。
当然我们需要测试,可能会强制加载某国语言,可以使用在Activity的SetContentView之前调用,比如强制简体中文,代码如下:
Resources resources = getResources();
Configuration config = resources.getConfiguration();
config.locale = Locale.SIMPLIFIED_CHINESE; //简体中文
DisplayMetrics dm = res.getDisplayMetrics();
resources.updateConfiguration(config, dm);
屏幕分辨率自适应
这里我们需要判断两种大体情况,屏幕的方向,比如常规的纵向port和横屏land,我们定义的图片资源为
layout或drawable,而横屏情况下位layout-land和drawable-land,当然还有一种情况就是分辨率。
目前Android手机分辨率有
HVGA (320x480) 的G1、G2、G3 对应标准的 drawable-mdpi
QVGA (240x320) 的G4 ,对应 drawable-ldpi
WVGA (480x800) 的N1,对应 drawable-hdpi 。
最终我们以MMS应用的例子,对应res文件夹的摆放如图:
1.首先,如果要程序自动适应系统语言进行转变,可以在res下添加相应的语言文件夹:如:添加中文,则文件夹命名为values-zh-rCN,如果不清楚需要的名字可以到:E:\android-sdk-windows\platforms\android-8\data\res,如这样的文件夹下寻找。这样就可以让程序自动适应系统的语言来选择语言。
2.如果我们想在程序内部可以手动地选择语言则:
a.首先获得当前的语言或者国家:
String able= getResources().getConfiguration().locale.getCountry();
b.进行判断:如果是中文则返回的able.equals("CN")
c.进行设置的代码为:
//选择中文
Configuration config = getResources().getConfiguration();
DisplayMetrics dm = getResources() .getDisplayMetrics();
config.locale = Locale.SIMPLIFIED_CHINESE;
getResources().updateConfiguration(config, dm);
d.最后用sharedPreferences保存当前的语言设置
最新技术文章: