【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
一. Application用途
1. Application用途
创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例;
Application构造方法 : Application的无参的构造方法必须是public的, 否则运行的时候会出现错误.
Application单例 : 在一个应用中, Application是单例的;
Application用途 : 所有的组件共享一个Application, 可以使用Application共享, 传递, 缓存数据;
Application用法 :
a. 组件间数据传递 : 组件之间传递数据的数据量比较大的时候, 尽量不要使用Intent附加域来传递, 可以将数据放在Application中, 以Application作为中转站;
b. 下载数据 : 从网络上下载的数据, 也可以暂时缓存到Application中, 如果下载的数据过多, 可以缓存到SD卡中;
c. 注意内存泄露 : Application是静态的, 存放数据的时候注意声明周期, 不要造成内存泄露;
2. 自定义Application技巧
在应用中经常用到自定义的Application, 自定义一个MyApplication, 将Application设置成单例, 并且在AndroidManifest.xml中注册这个MyApplication;
(1)设置MyApplication单例
a. 定义私有 静态 的MyApplication;
b. 设置一个公有的静态方法, 将this 赋值给自定义的MyApplication对象;
c. 设置一个获取MyApplication对象的方法, 该方法公共 静态;
public class MyApplication extends Application { /* * 单例模式 : 私有 静态 本类的对象 */ private static MyApplication mApplication; /* * 单例模式 : 构造方法 , 注意 : Application的构造方法必须是public的 */ public ReceiverApplication(){ mApplication = this; } /* * 单例模式 : 公共静态获取方法 */ public static MyApplication getInstance() { return mApplication; } }
这样调用getInstance()方法, 就可以在任何类中调用Application了, 并能取到该类中的数据;
(2)在AndroidManifest.xml中注册自定义的Application
<manifest xmlns:android="http://schemas.android.com/apk/res/android" > <application android:name=".MyApplication" > </application> </manifest>
(3)获取Application方法
调用系统方法 : 在Activity中可以调用getApplicationContext()方法获取Application;
通过自定义的方法 : 如我们上面自定义的Application那样, 可以调用自定义的getInstance()方法获取Application实例对象;
二. ListView中元素的排序
ListView中的元素排序, 即将数据源排序即可;
给集合排序的方法 : 调用Collections的sort(list, Comparator)方法, 该方法需要2个参数, 第一个参数就是需要排序的集合, 第二个参数是比较器;
这里的比较器需要创建, 并且重写其中的compare()方法, compare()方法返回1或者-1, 用此来控制排序的升序还是降序;
Collections.sort(mList, new Comparator<Integer>() { @Override public int compare(Integer a, Integer b) { if (a>b) { return 1; } return -1; } });
这样就会将mList集合自动进行排序;
三. 格式化浮点数
如何在程序中保留一个float或者double浮点数的小数位数 , 这里可以使用以下几种方法 :
1.使用DecimalFormat格式化浮点数
例如 : System.out.println(new java.text.DecimalFormat("0.00").format(3.135)); 5最近的偶数是4, 打印的结果就是3.14;
System.out.println(new java.text.DecimalFormat("0.00").format(3.125)); 5最近的偶数是2, 打印的结果就是3.12;
float pi = 3.1415926f; DecimalFormat decimalFormat = new DecimalFormat("#.00"); String formatData = decimalFormat.format(pi); System.out.println(formatData); System.out.println(new DecimalFormat("#.00").format(pi));
2.利用BigDecimal实现
float pi = 3.1415926f; BigDecimal bigDecimal = new BigDecimal(pi); float result = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue(); System.out.println(result);
与浮点数有关的构造方法 : 可以向构造方法中传入浮点数 或者 字符串 , 这里需要注意的是 , 使用浮点数的构造方法不精确 , 这个值最后会有不该有的数据,尽量使用字符串的构造方法.
BigDecimal bd1=new BigDecimal(0.05); System.out.println(bd1.toString()); BigDecimal bd2=new BigDecimal("0.05"); System.out.println(bd2.toString());
结果是 :
0.05000000000000000277555756156289135105907917022705078125 0.05
因此使用字符串的构造函数,获得的数据更精确.
BigDecimal bd3=new BigDecimal(String.valueOf(0.05)); BigDecimal bd4=new BigDecimal(String.valueOf(0.01)); System.out.println((bd3.add(bd4)).doubleValue());
减法计算 :
BigDecimal bd5=new BigDecimal(String.valueOf(0.05)); BigDecimal bd6=new BigDecimal(String.valueOf(0.01)); System.out.println((bd5.subtract(bd6)).doubleValue());
乘法计算 :
BigDecimal bd7=new BigDecimal(String.valueOf(0.05)); BigDecimal bd8=new BigDecimal(String.valueOf(0.01)); System.out.println((bd7.multiply(bd8)).doubleValue());
除法计算 :
//这里没有考虑数据错误的可能情况 //定义了精确位数 int scale=10; BigDecimal bd9=new BigDecimal(String.valueOf(0.05)); BigDecimal bd10=new BigDecimal(String.valueOf(0.03)); System.out.println((bd9.divide(bd10,scale,BigDecimal.ROUND_HALF_EVEN)).doubleValue());
四舍五入:
//四舍五入 scale=4; BigDecimal bd11=new BigDecimal(String.valueOf(3.1415926)); System.out.println(bd11.setScale(scale,BigDecimal.ROUND_HALF_UP).toString());
四舍五入的精确模式 :
- ROUND_CEILING : 向正无穷方向舍入 .
- ROUND_DOWN : 向零方向舍入
- ROUND_FLOOR : 向负无穷方向射舍入
- ROUND_HALF_DOWN : 向距离近的一方舍入 , 如果两边相等 , 向下舍入 , 例如 2.155 , 保留2位小数的话 是 2.15;
- ROUND_HALF_UP : 向距离近的一方舍入 , 如果两边相等 , 向上舍入 , 例如 2.155,保留两位小数的话 是 2.16; 这个就是四舍五入
- ROUND_HALF_EVEN: 向距离近的一方舍入 , 如果两边距离相等 , 如果保留位是奇数位 使用ROUND_HALF_UP , 如果保留位是偶数位,使用ROUND_HALF_DOWN;
- ROUND_UNNECESSARY : 精确的计算 , 不需要舍入 .
- ROUND_UP : 向远离0的方向舍入.
四. string.xml占位符
开发中经常遇到这样的情况 , 在string.xml中用到以下占位符
<string name="delete_success">删除<xliff:g id="name">%1$s</xliff:g>成功</string>
<string name="upload_success">%1$s上传到%2$s成功</string>
1.xliff:g标签
五. 动态引用图片
在资源文件中存放有 image_1.png, image_2.png, image_3.png 三张图片 , 根据传入参数动态引用对应的图片 , 有三个解决方法
根据R.drawable.xx动态引用是错误的 , 因为每个这种id都对应着R文件中的一个id,如果没有相对应的id , 编译不会通过;
建立一个工程,包名为com.yun.demo
方案一 : 图片放在drawable目录下的情况
Resources resources = this.getResources(); int imageIndentify = resources.getIdentifier(imageName, "drawable","chao.yun.demo");
使用上面的代码可以通过字符串拼接图片名称 , 根据传入的参数 , 拼接imageName字符串 , 从而动态的获取图片对应的id;
resources.getIdentifier(imageName, "drawable","chao.yun.demo");
这个方法返回的是图片对应的id ;
详细代码 :
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/ll_1" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1"></LinearLayout> <LinearLayout android:id="@+id/ll_2" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1"></LinearLayout> <LinearLayout android:id="@+id/ll_3" android:layout_width="fill_parent" android:layout_height="0px" android:layout_weight="1"></LinearLayout> </LinearLayout>
activity代码 :
public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); LinearLayout ll_1 = (LinearLayout) findViewById(R.id.ll_1); LinearLayout ll_2 = (LinearLayout) findViewById(R.id.ll_2); LinearLayout ll_3 = (LinearLayout) findViewById(R.id.ll_3); Resources resources = this.getResources(); String imageName = "image_" + 1; int imageIndentify = resources.getIdentifier(imageName, "drawable","chao.yun.demo"); ll_1.setBackgroundResource(imageIndentify); imageName = "image_" + 2; imageIndentify = resources.getIdentifier(imageName, "drawable","chao.yun.demo"); ll_2.setBackgroundResource(imageIndentify); imageName = "image_" + 3; imageIndentify = resources.getIdentifier(imageName, "drawable","chao.yun.demo"); ll_3.setBackgroundResource(imageIndentify); } }
六. Android 自带图标库
Android™ 2.1 android.R.drawable Icon Resources
- Android™ 1.5 android.R.drawable Icon Resources
- Android™ 1.6 android.R.drawable Icon Resources
- Android™ 2.1 android.R.drawable Icon Resources
- Originated from: http://www.darshancomputing.com/android/1.5-drawables.html
This is a list of resources in Android 2.1's android.R.drawable
that might be useful as icons in your Android applications. You can use them like this:
myMenuItem.setIcon(android.R.drawable.ic_menu_save);
android:icon="@android:drawable/ic_menu_save"
![]() alert_dark_frame |
![]() alert_light_frame |
![]() arrow_down_float |
![]() arrow_up_float |
![]() bottom_bar |
![]() btn_default |
![]() btn_default_small |
![]() btn_dialog |
![]() btn_dropdown |
![]() btn_minus |
![]() btn_plus |
![]() btn_radio |
![]() btn_star |
![]() btn_star_big_off |
![]() btn_star_big_on |
![]() button_onoff_indicator_off |
![]() button_onoff_indicator_on |
![]() checkbox_off_background |
![]() checkbox_on_background |
![]() dark_header |
![]() dialog_frame |
![]() divider_horizontal_bright |
![]() divider_horizontal_dark |
![]() divider_horizontal_dim_dark |
![]() divider_horizontal_textfield |
![]() edit_text |
![]() editbox_background |
![]() editbox_background_normal |
![]() editbox_dropdown_dark_frame |
![]() editbox_dropdown_light_frame |
![]() gallery_thumb |
![]() ic_btn_speak_now |
![]() ic_delete |
![]() ic_dialog_alert |
![]() ic_dialog_dialer |
![]() ic_dialog_email |
![]() ic_dialog_info |
![]() ic_dialog_map |
![]() ic_input_add |
![]() ic_input_delete |
![]() ic_input_get |
![]() ic_lock_idle_alarm |
![]() ic_lock_idle_charging |
![]() ic_lock_idle_lock |
![]() ic_lock_idle_low_battery |
![]() ic_lock_lock |
![]() ic_lock_power_off |
![]() ic_lock_silent_mode |
![]() ic_lock_silent_mode_off |
![]() ic_media_ff |
![]() ic_media_next |
![]() ic_media_pause |
![]() ic_media_play |
![]() ic_media_previous |
![]() ic_media_rew |
![]() ic_menu_add |
![]() ic_menu_agenda |
![]() ic_menu_always_landscape_portrait |
![]() ic_menu_call |
![]() ic_menu_camera |
![]() ic_menu_close_clear_cancel |
![]() ic_menu_compass |
![]() ic_menu_crop |
![]() ic_menu_day |
![]() ic_menu_delete |
![]() ic_menu_directions |
![]() ic_menu_edit |
![]() ic_menu_gallery |
![]() ic_menu_help |
![]() ic_menu_info_details |
![]() ic_menu_manage |
![]() ic_menu_mapmode |
![]() ic_menu_month |
![]() ic_menu_more |
![]() ic_menu_my_calendar |
![]() ic_menu_mylocation |
![]() ic_menu_myplaces |
![]() ic_menu_preferences |
![]() ic_menu_recent_history |
![]() ic_menu_report_image |
![]() ic_menu_revert |
![]() ic_menu_rotate |
![]() ic_menu_save |
![]() ic_menu_search |
![]() ic_menu_send |
![]() ic_menu_set_as |
![]() ic_menu_share |
![]() ic_menu_slideshow |
![]() ic_menu_sort_alphabetically |
![]() ic_menu_sort_by_size |
![]() ic_menu_today |
![]() ic_menu_upload |
![]() ic_menu_upload_you_tube |
![]() ic_menu_view |
![]() ic_menu_week |
![]() ic_menu_zoom |
![]() ic_notification_clear_all |
![]() ic_notification_overlay |
![]() ic_partial_secure |
![]() ic_popup_disk_full |
![]() ic_popup_reminder |
![]() ic_popup_sync |
![]() ic_search_category_default |
![]() ic_secure |
![]() menu_frame |
![]() menu_full_frame |
![]() picture_frame |
![]() presence_away |
![]() presence_busy |
![]() presence_invisible |
![]() presence_offline |
![]() presence_online |
![]() progress_indeterminate_horizontal |
![]() radiobutton_off_background |
![]() radiobutton_on_background |
![]() spinner_background |
![]() spinner_dropdown_background |
![]() star_big_off |
![]() star_big_on |
![]() star_off |
![]() star_on |
![]() stat_notify_call_mute |
![]() stat_notify_chat |
![]() stat_notify_error |
![]() stat_notify_missed_call |
![]() stat_notify_more |
![]() stat_notify_sdcard |
![]() stat_notify_sdcard_prepare |
![]() stat_notify_sdcard_usb |
![]() stat_notify_sync |
![]() stat_notify_sync_noanim |
![]() stat_notify_voicemail |
![]() stat_sys_data_bluetooth |
![]() stat_sys_download |
![]() stat_sys_download_done |
![]() stat_sys_headset |
![]() stat_sys_phone_call |
![]() stat_sys_phone_call_forward |
![]() stat_sys_phone_call_on_hold |
![]() stat_sys_speakerphone |
![]() stat_sys_upload |
![]() stat_sys_upload_done |
![]() stat_sys_vp_phone_call |
![]() stat_sys_vp_phone_call_on_hold |
![]() stat_sys_warning |
![]() status_bar_item_app_background |
![]() status_bar_item_background |
![]() sym_action_call |
![]() sym_action_chat |
![]() sym_action_email |
![]() sym_call_incoming |
![]() sym_call_missed |
![]() sym_call_outgoing |
![]() sym_contact_card |
![]() sym_def_app_icon |
![]() title_bar |
![]() title_bar_tall |
![]() toast_frame |
![]() zoom_plate |
转载
http://docs.since2006.com/android/2.1-drawables.php
七 Android 不显示标题栏和全屏的设置方法
1.在Manifest.xml中设置
不显示标题栏
android:theme="@android:style/Theme.NoTitleBar"
全屏
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
2.在代码中实现
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片的更多相关文章
- Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片
一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...
- 安卓程序代写 网上程序代写[原]Android项目中string.xml占位符
开发中经常遇到这样的情况 , 在string.xml中用到以下占位符 <string name="delete_success">删除<xliff:g id=&q ...
- 【我的Android进阶之旅】Android Studio如何轻松整理字符串到string.xml中
使用Android Studio一段时间了,还有很多小技巧没有掌握.比如:平常将字符串整理到string.xml中,都是手动的去复制字符串到string.xml中,然后再回来修改引用该字符串的代码,这 ...
- 安卓程序代写 网上程序代写[原]Android开发技巧--Application
1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Application构造方法 : App ...
- Android开发学习之路-自定义ListView(继承BaseAdapter)
大三学生一个,喜欢编程,喜欢谷歌,喜欢Android,所以选择的方向自然是Android应用开发,开博第一篇,希望以后会有更多的进步. 最近在做一个记账App的时候,需要一个Activity来显示每个 ...
- 一步步教你为网站开发Android客户端---HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新ListView
本文面向Android初级开发者,有一定的Java和Android知识即可. 文章覆盖知识点:HttpWatch抓包,HttpClient模拟POST请求,Jsoup解析HTML代码,动态更新List ...
- Android 快速开发系列 打造万能的ListView GridView 适配器
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38902805 ,本文出自[张鸿洋的博客] 1.概述 相信做Android开发的写 ...
- 【Android进阶】在开发中Application到底用来做什么
首先,在一个Android程序中,有且只有一个Application对象,在程序开始跑起来的时候,首先执行Application的onCreate方法,这是一个Android应用的入口,在开发中,我们 ...
- Android开发之漫漫长途 XIV——ListView
该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列.该系列引用了<Android开发艺术探索>以及<深入理解And ...
随机推荐
- Dynamics CRM2016 关于修改部署管理员账号权限引发的问题
最近在用2016做项目,一个同事的一个操作给我带来了一个头疼的问题,他把部署管理员的CRM账号的管理员权限给移除了,导致整个系统的所有账号进CRM都是下图这样 即使系统中还存在其他的拥有管理员权限的账 ...
- oracle11实战详解
因为最近可以学习oracle了,所以昨天把oracle装好了,装的时候因为种种不知名的原因,把我的mysql居然连连不上了.说实话如果自己看教程安装的话还是有一点小复杂的,特别是对于我这种学渣来说,我 ...
- 使用反射创建Bean、Spring中是如何根据类名配置创建Bean实例、Java提供了Class类获取类别的字段和方法,包括构造方法
Java提供了Class类,可以通过编程方式获取类别的字段和方法,包括构造方法 获取Class类实例的方法: 类名.class 实例名.getClass() Class.forNam ...
- android:shape属性详解
这一类的shape定义在xml中 file location: res/drawable/filename.xml The filename is used as the resource ID.(这 ...
- Swift中类似C++和ruby中的final机制
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 我们知道在C++和ruby语言的错误处理中有一种final机制 ...
- Python 自动刷博客浏览量
哈哈,今天的话题有点那什么了哈.咱们应该秉承学习技术的角度来看,那么就开始今天的话题吧. 思路来源 今天很偶然的一个机会,听到别人在谈论现在的"刷量"行为,于是就激发了我的好奇心. ...
- java的overload与override
概括 方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现.重写(Overriding)是父类与子类之间多态性的一种表现,而重载(Overloading)是一个 ...
- Cocos2D中Action的进阶使用技巧(二)
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上回说到解决办法是使用CCTargetedAction类. C ...
- [java面试]宇信易诚 广州分公司 java笔试题目回忆录
本文地址:http://blog.csdn.net/sushengmiyan/article/details/28479895 作者:sushengmiyan -------------------- ...
- Bootstrap简单HelloWorld入门教程
这篇教程旨在让你在20分钟内学会使用twitter bootstrap创建一个站点.看完这个教程后你应该能够使用bootstrap来建立一个基本的响应式布局的页面,了解栅格系统,并且能够使用boots ...