一. 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格式化浮点数

首先创建一个DecimalFormat类 ,  这个类可以按照一定的格式化数字来格式化浮点数. 常见的格式化字符是"#" , "0" .
创建该类的时候 , 将格式化的格式传入 , 例如如果要保存两位小数 , 就传入 "#.00" , 以此类推 . 
创建了DecimalFormat对象之后 , 调用该对象的format对象 , 将需要格式化的浮点数传入这个方法 , 返回的结果就是格式化之后的固定位数的浮点数的字符串形式 . 
注意 : 这种方法格式化之后的浮点数对象是字符串形式 , 如果之后需要使用这个浮点数进行计算 , 就需要使用BigDecimal进行实现的这种方法 ; 
精确度问题 : DecimalFormat使用的是half-even舍入法, 这个不是四舍五入方法, 当出现5的时候,就会向最近的偶数靠近.

例如 : 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实现

创建一个BigDecimal对象 , 创建的时候 , 传入需要格式化的浮点数 , new BigDecimal(float) ; 
调用这个BigDecimal的setScale方法 , 这个方法传入的参数 : 需要保留的小数位数 , BigDecimal.ROUND_HALF_UP常量 , 之后调用这个常量对应的将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的基本方法 : 加法 add , 减法 subtract, 乘法 multiply, divide 除法, setScale四舍五入.

加法计算 : 
        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 ;

第一个参数是图片的名称 , 如果没有找到 , 返回0 ;
第二个参数是默认的资源类型 , 如果找的是图片 , 就是 "drawable" , 这个不是具体的目录 , 因此不用注明"drawable-hdpi"
第三个参数是包名 , 这个包名是创建工程时候的包名 , 是总的包名 , 与manifest配置文件中的包名相同;

详细代码 :
layout中的代码 :

<?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

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:

Java Usage example:
myMenuItem.setIcon(android.R.drawable.ic_menu_save);
Resource Usage example:
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开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片的更多相关文章

  1. 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片

    一. Application用途 1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Appl ...

  2. 安卓程序代写 网上程序代写[原]Android开发技巧--Application

    1. Application用途 创建Application时机 : Application在启动的时候会调用Application无参的构造方法创建实例; Application构造方法 : App ...

  3. 安卓程序代写 网上程序代写[原]Android项目中string.xml占位符

    开发中经常遇到这样的情况 , 在string.xml中用到以下占位符 <string name="delete_success">删除<xliff:g id=&q ...

  4. android开发(34) 自定义 listView的分割线( 使用xml drawable画多条线)

    我遇到这样一个场景,我需要自定义 listView的分割线,而这个分割线是由两条线组成的,在使用xml drawable时遇到了困难. 注释:画两条线是为了实现 凹陷的效果,在绘图中一条暗线紧跟着一条 ...

  5. Android开发技巧——实现可复用的ActionSheet菜单

    在上一篇<Android开发技巧--使用Dialog实现仿QQ的ActionSheet菜单>中,讲了这种菜单的实现过程,接下来将把它改成一个可复用的控件库. 本文原创,转载请注明出处: h ...

  6. Android开发技巧——使用PopupWindow实现弹出菜单

    在本文当中,我将会与大家分享一个封装了PopupWindow实现弹出菜单的类,并说明它的实现与使用. 因对界面的需求,android原生的弹出菜单已不能满足我们的需求,自定义菜单成了我们的唯一选择,在 ...

  7. Android开发技巧——自定义控件之使用style

    Android开发技巧--自定义控件之使用style 回顾 在上一篇<Android开发技巧--自定义控件之自定义属性>中,我讲到了如何定义属性以及在自定义控件中获取这些属性的值,也提到了 ...

  8. 50个android开发技巧

    50个android开发技巧 http://blog.csdn.net/column/details/androidhacks.html

  9. Android开发技巧——大图裁剪

    本篇内容是接上篇<Android开发技巧--定制仿微信图片裁剪控件> 的,先简单介绍对上篇所封装的裁剪控件的使用,再详细说明如何使用它进行大图裁剪,包括对旋转图片的裁剪. 裁剪控件的简单使 ...

随机推荐

  1. 学生管理系统增删查基本操作(dom4j/sax技术)

    基本代码: student.xml <?xml version="1.0" encoding="UTF-8"?><student> &l ...

  2. Redis(三):Redis数据类型

    Redis数据类型目录导航: Redis五大数据类型 哪里去获取Redis常见数据类型操作命令 Redis键(Key) Redis字符串(String) Redis列表(List) Redis集合(S ...

  3. 【 es搜索】

    地图搜索实现: ①参数: 左下角经纬度和右上角经纬度 图层数(zoom) 关键字等各种数据库中的字段 排序方式 具体的坐标点+距离 ②实现 a.用es作为关系库,首先先mapping所有的字段,然后用 ...

  4. MQTT的学习之Mosquitto安装&使用(1)

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案.本文的主旨在于记录M ...

  5. Python在线编程环境

    除了安装Python的IDE之外,也可以使用在网页中随时随地编写Python程序. Python官网:https://www.python.org/shell Python123:https://py ...

  6. 成都Uber优步司机奖励政策(2月1日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. day 4 集合

    1.集合 In [1]: a = (11,22,33,11,22,33) In [2]: a Out[2]: (11, 22, 33, 11, 22, 33) #元组 In [3]: b = [11, ...

  8. POJ青蛙的约会

    青蛙的约会 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 114412   Accepted: 23446 Descript ...

  9. 「国庆训练」Bomb(HDU-5934)

    题意 给定\(n\)个炸弹,每个炸弹的坐标与代价与影响范围给定,炸弹会引爆影响范围内其他所有炸弹.求引爆所有炸弹的最小代价. 分析 先做\(n^2\)的循环,然后建图,对\(i\)能引爆\(j\)建边 ...

  10. jieba结巴分词

    pip install jieba安装jieba模块 如果网速比较慢,可以使用豆瓣的Python源:pip install -i https://pypi.douban.com/simple/ jie ...