不知不觉中,就收集了超过60条的自己感觉有意思的代码片段,分为三篇文章:android有用代码片段、Android有用代码片段(二)、Android有用代码片段(三)这三篇,今天,开始第四篇的整理!
六十一、Android创建桌面快捷方式:
1. /**
2. * 为程序创建桌面快捷方式
3. */
4. private void addShortcut(){
5. new Intent("com.android.launcher.action.INSTALL_SHORTCUT");
6.
7. //快捷方式的名称
8. shortcut.putExtra(Intent.EXTRA_SHORTCUT_NAME, getString(R.string.app_name));
9. "duplicate", false); //不允许重复创建
10.
11. //指定当前的Activity为快捷方式启动的对象: 如 com.everest.video.VideoPlayer
12. //注意: ComponentName的第二个参数必须加上点号(.),否则快捷方式无法启动相应程序
13. new ComponentName(this.getPackageName(), "."+this.getLocalClassName());
14. new Intent(Intent.ACTION_MAIN).setComponent(comp));
15.
16. //快捷方式的图标
17. this, R.drawable.icon);
18. shortcut.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE, iconRes);
19.
20. sendBroadcast(shortcut);
21. }
需要声明权限:
1. <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
http://www.apkbus.com/android-17389-1-1.html
http://dev.10086.cn/cmdn/wiki/index.php?edition-view-8836-1.html
六十二、android画图去锯齿效果
paint.setAntiAlias(true);
画图片的时候,前面设置没有用
canvas.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
六十三、获取sd卡里文件信息
1. public class SDFileExplorer extends Activity{
2. ListView listView;
3. TextView textView;
4. // 记录当前的父文件夹
5. File currentParent;
6. // 记录当前路径下的所有文件的文件数组
7. File[] currentFiles;
8.
9. @Override
10. public void onCreate(Bundle savedInstanceState){
11. super.onCreate(savedInstanceState);
12. setContentView(R.layout.main);
13. //获取列出全部文件的ListView
14. listView = (ListView) findViewById(R.id.list);
15. textView = (TextView) findViewById(R.id.path);
16. //获取系统的SD卡的目录
17. new File("/mnt/sdcard/");
18. //如果 SD卡存在
19. if (root.exists()){
20. currentParent = root;
21. currentFiles = root.listFiles();
22. //使用当前目录下的全部文件、文件夹来填充ListView
23. inflateListView(currentFiles);
24. }
25. // 为ListView的列表项的单击事件绑定监听器
26. new OnItemClickListener(){
27. @Override
28. public void onItemClick(AdapterView<?> parent, View view,
29. int position, long id){
30. // 用户单击了文件,直接返回,不做任何处理
31. if (currentFiles[position].isFile())
32. return;
33. // 获取用户点击的文件夹下的所有文件
34. File[] tmp = currentFiles[position].listFiles();
35. if (tmp == null || tmp.length == 0){
36. this, "当前路径不可访问或该路径下没有文件",
37. 20000).show();
38. else{
39. //获取用户单击的列表项对应的文件夹,设为当前的父文件夹
40. currentParent = currentFiles[position];
41. //保存当前的父文件夹内的全部文件和文件夹
42. currentFiles = tmp;
43. // 再次更新ListView
44. inflateListView(currentFiles);
45. }
46. }
47. });
48. // 获取上一级目录的按钮
49. Button parent = (Button) findViewById(R.id.parent);
50. new OnClickListener(){
51. @Override
52. public void onClick(View source){
53. try{
54. if (!currentParent.getCanonicalPath().equals("/mnt/sdcard")){
55. // 获取上一级目录
56. currentParent = currentParent.getParentFile();
57. // 列出当前目录下所有文件
58. currentFiles = currentParent.listFiles();
59. // 再次更新ListView
60. inflateListView(currentFiles);
61. }
62. }
63. catch (IOException e){
64. e.printStackTrace();
65. }
66. }
67. });
68. }
69.
70. private void inflateListView(File[] files){
71. // 创建一个List集合,List集合的元素是Map
72. new ArrayList<Map<String, Object>>();
73. for (int i = 0; i < files.length; i++){
74. new HashMap<String, Object>();
75. //如果当前File是文件夹,使用folder图标;否则使用file图标
76. if (files[i].isDirectory()){
77. "icon", R.drawable.folder);
78. else{
79. "icon", R.drawable.file);
80. }
81. "fileName", files[i].getName());
82. //添加List项
83. listItems.add(listItem);
84. }
85. // 创建一个SimpleAdapter
86. new SimpleAdapter(this, listItems,
87. new String[] { "icon", "fileName" }, new int[] {
88. R.id.icon, R.id.file_name });
89. // 为ListView设置Adapter
90. listView.setAdapter(simpleAdapter);
91. try{
92. "当前路径为:" + currentParent.getCanonicalPath());
93. catch (IOException e){
94. e.printStackTrace();
95. }
96. }
97. }
六十四、Android标题栏显示progressBar
1. protected void onCreate(Bundle savedInstanceState) {
2. super.onCreate(savedInstanceState);
3. //先给Activity注册界面进度条功能
4. setContentView(R.layout.main);
5. true);//在需要显示进度条的时候调用这个方法
6. false);//在不需要显示进度条的时候调用这个方法
7. }
六十五、单击EditText全选内容
1. percent.setOnTouchListener(this);
2.
3. @Override
4. public boolean onTouch(View v, MotionEvent event) {
5. if(v.getId()==R.id.seekPercent) {
6. percent.selectAll();
7. InputMethodManager imm = (InputMethodManager)
8. context.getSystemService(Context.INPUT_METHOD_SERVICE);
9. imm.showSoftInput(v, 0);
10. return true;
11. }
12. return false;
13. }
六十六、Android设置图片圆角
1. /**
2. * 将图片设置为圆角
3. */
4. public static Bitmap toRoundCorner(Bitmap bitmap, int pixels) {
5. Bitmap output = Bitmap.createBitmap(bitmap.getWidth(),
6. bitmap.getHeight(), Config.ARGB_8888);
7. new Canvas(output);
8. final int color = 0xff424242;
9. final Paint paint = new Paint();
10. final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight());
11. final RectF rectF = new RectF(rect);
12. final float roundPx = pixels;
13. true);
14. 0, 0, 0, 0);
15. paint.setColor(color);
16. canvas.drawRoundRect(rectF, roundPx, roundPx, paint);
17. new PorterDuffXfermode(Mode.SRC_IN));
18. canvas.drawBitmap(bitmap, rect, rect, paint);
19. return output;
20. }
六十七、Android 自定义json解析类
1. import java.lang.reflect.Method;
2. import java.util.Collection;
3. import java.util.Map;
4. import java.util.Set;
5. public final class JsonUtil{
6. /**
7. * 把对象封装为JSON格式
8. *
9. * @param o
10. * 对象
11. * @return JSON格式
12. */
13. @SuppressWarnings("unchecked")
14. public static String toJson(final Object o){
15. if (o == null){
16. return "null";
17. }
18. if (o instanceof String) //String{
19. return string2Json((String) o);
20. }
21. if (o instanceof Boolean) //Boolean{
22. return boolean2Json((Boolean) o);
23. }
24. if (o instanceof Number) //Number{
25. return number2Json((Number) o);
26. }
27. if (o instanceof Map) //Map{
28. return map2Json((Map<String, Object>) o);
29. }
30. if (o instanceof Collection) //List Set{
31. return collection2Json((Collection) o);
32. }
33. if (o instanceof Object[]) //对象数组{
34. return array2Json((Object[]) o);
35. }
36. if (o instanceof int[])//基本类型数组
37. {
38. return intArray2Json((int[]) o);
39. }
40. if (o instanceof boolean[])//基本类型数组
41. {
42. return booleanArray2Json((boolean[]) o);
43. }
44. if (o instanceof long[])//基本类型数组
45. {
46. return longArray2Json((long[]) o);
47. }
48. if (o instanceof float[])//基本类型数组
49. {
50. return floatArray2Json((float[]) o);
51. }
52. if (o instanceof double[])//基本类型数组
53. {
54. return doubleArray2Json((double[]) o);
55. }
56. if (o instanceof short[])//基本类型数组
57. {
58. return shortArray2Json((short[]) o);
59. }
60. if (o instanceof byte[])//基本类型数组
61. {
62. return byteArray2Json((byte[]) o);
63. }
64. if (o instanceof Object) //保底收尾对象
65. {
66. return object2Json(o);
67. }
68. throw new RuntimeException("不支持的类型: " + o.getClass().getName());
69. }
70. /**
71. * 将 String 对象编码为 JSON格式,只需处理好特殊字符
72. *
73. * @param s
74. * String 对象
75. * @return JSON格式
76. */
77. static String string2Json(final String s)
78. {
79. final StringBuilder sb = new StringBuilder(s.length() + 20);
80. sb.append('\"');
81. for (int i = 0; i < s.length(); i++)
82. {
83. final char c = s.charAt(i);
84. switch (c)
85. {
86. case '\"':
87. sb.append("\\\"");
88. break;
89. case '\\':
90. sb.append("\\\\");
91. break;
92. case '/':
93. sb.append("\\/");
94. break;
95. case '\b':
96. sb.append("\\b");
97. break;
98. case '\f':
99. sb.append("\\f");
100. break;
101. case '\n':
102. sb.append("\\n");
103. break;
104. case '\r':
105. sb.append("\\r");
106. break;
107. case '\t':
108. sb.append("\\t");
109. break;
110. default:
111. sb.append(c);
112. }
113. }
114. sb.append('\"');
115. return sb.toString();
116. }
117. /**
118. * 将 Number 表示为 JSON格式
119. *
120. * @param number
121. * Number
122. * @return JSON格式
123. */
124. static String number2Json(final Number number)
125. {
126. return number.toString();
127. }
128. /**
129. * 将 Boolean 表示为 JSON格式
130. *
131. * @param bool
132. * Boolean
133. * @return JSON格式
134. */
135. static String boolean2Json(final Boolean bool)
136. {
137. return bool.toString();
138. }
139. /**
140. * 将 Collection 编码为 JSON 格式 (List,Set)
141. *
142. * @param c
143. * @return
144. */
145. static String collection2Json(final Collection<Object> c)
146. {
147. final Object[] arrObj = c.toArray();
148. return toJson(arrObj);
149. }
150. /**
151. * 将 Map<String, Object> 编码为 JSON 格式
152. *
153. * @param map
154. * @return
155. */
156. static String map2Json(final Map<String, Object> map)
157. {
158. if (map.isEmpty())
159. {
160. return "{}";
161. }
162. final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方
163. sb.append('{');
164. final Set<String> keys = map.keySet();
165. for (final String key : keys)
166. {
167. final Object value = map.get(key);
168. sb.append('\"');
169. sb.append(key); //不能包含特殊字符
170. sb.append('\"');
171. sb.append(':');
172. sb.append(toJson(value)); //循环引用的对象会引发无限递归
173. sb.append(',');
174. }
175. // 将最后的 ',' 变为 '}':
176. sb.setCharAt(sb.length() - 1, '}');
177. return sb.toString();
178. }
179. /**
180. * 将数组编码为 JSON 格式
181. *
182. * @param array
183. * 数组
184. * @return JSON 格式
185. */
186. static String array2Json(final Object[] array)
187. {
188. if (array.length == 0)
189. {
190. return "[]";
191. }
192. final StringBuilder sb = new StringBuilder(array.length << 4); //4次方
193. sb.append('[');
194. for (final Object o : array)
195. {
196. sb.append(toJson(o));
197. sb.append(',');
198. }
199.
200. // 将最后添加的 ',' 变为 ']':
201. sb.setCharAt(sb.length() - 1, ']');
202. return sb.toString();
203. }
204. static String intArray2Json(final int[] array)
205. {
206. if (array.length == 0)
207. {
208. return "[]";
209. }
210. final StringBuilder sb = new StringBuilder(array.length << 4);
211. sb.append('[');
212. for (final int o : array)
213. {
214. sb.append(Integer.toString(o));
215. sb.append(',');
216. }
217. // set last ',' to ']':
218. sb.setCharAt(sb.length() - 1, ']');
219. return sb.toString();
220. }
221. static String longArray2Json(final long[] array)
222. {
223. if (array.length == 0)
224. {
225. return "[]";
226. }
227. final StringBuilder sb = new StringBuilder(array.length << 4);
228. sb.append('[');
229. for (final long o : array)
230. {
231. sb.append(Long.toString(o));
232. sb.append(',');
233. }
234. // set last ',' to ']':
235. sb.setCharAt(sb.length() - 1, ']');
236. return sb.toString();
237. }
238. static String booleanArray2Json(final boolean[] array)
239. {
240. if (array.length == 0)
241. {
242. return "[]";
243. }
244. final StringBuilder sb = new StringBuilder(array.length << 4);
245. sb.append('[');
246. for (final boolean o : array)
247. {
248. sb.append(Boolean.toString(o));
249. sb.append(',');
250. }
251. // set last ',' to ']':
252. sb.setCharAt(sb.length() - 1, ']');
253. return sb.toString();
254. }
255. static String floatArray2Json(final float[] array)
256. {
257. if (array.length == 0)
258. {
259. return "[]";
260. }
261. final StringBuilder sb = new StringBuilder(array.length << 4);
262. sb.append('[');
263. for (final float o : array)
264. {
265. sb.append(Float.toString(o));
266. sb.append(',');
267. }
268. // set last ',' to ']':
269. sb.setCharAt(sb.length() - 1, ']');
270. return sb.toString();
271. }
272. static String doubleArray2Json(final double[] array)
273. {
274. if (array.length == 0)
275. {
276. return "[]";
277. }
278. final StringBuilder sb = new StringBuilder(array.length << 4);
279. sb.append('[');
280. for (final double o : array)
281. {
282. sb.append(Double.toString(o));
283. sb.append(',');
284. }
285. // set last ',' to ']':
286. sb.setCharAt(sb.length() - 1, ']');
287. return sb.toString();
288. }
289. static String shortArray2Json(final short[] array)
290. {
291. if (array.length == 0)
292. {
293. return "[]";
294. }
295. final StringBuilder sb = new StringBuilder(array.length << 4);
296. sb.append('[');
297. for (final short o : array)
298. {
299. sb.append(Short.toString(o));
300. sb.append(',');
301. }
302. // set last ',' to ']':
303. sb.setCharAt(sb.length() - 1, ']');
304. return sb.toString();
305. }
306. static String byteArray2Json(final byte[] array)
307. {
308. if (array.length == 0)
309. {
310. return "[]";
311. }
312. final StringBuilder sb = new StringBuilder(array.length << 4);
313. sb.append('[');
314. for (final byte o : array)
315. {
316. sb.append(Byte.toString(o));
317. sb.append(',');
318. }
319. // set last ',' to ']':
320. sb.setCharAt(sb.length() - 1, ']');
321. return sb.toString();
322. }
323. public static String object2Json(final Object bean)
324. {
325. //数据检查
326. if (bean == null)
327. {
328. return "{}";
329. }
330. final Method[] methods = bean.getClass().getMethods(); //方法数组
331. final StringBuilder sb = new StringBuilder(methods.length << 4); //4次方
332. sb.append('{');
333. for (final Method method : methods)
334. {
335. try
336. {
337. final String name = method.getName();
338. String key = "";
339. if (name.startsWith("get"))
340. {
341. key = name.substring(3);
342. //防死循环
343. final String[] arrs =
344. { "Class" };
345. boolean bl = false;
346. for (final String s : arrs)
347. {
348. if (s.equals(key))
349. {
350. bl = true;
351. continue;
352. }
353. }
354. if (bl)
355. {
356. continue; //防死循环
357. }
358. }
359. else if (name.startsWith("is"))
360. {
361. key = name.substring(2);
362. }
363. if (key.length() > 0 && Character.isUpperCase(key.charAt(0)) && method.getParameterTypes().length == 0)
364. {
365. if (key.length() == 1)
366. {
367. key = key.toLowerCase();
368. }
369. else if (!Character.isUpperCase(key.charAt(1)))
370. {
371. key = key.substring(0, 1).toLowerCase() + key.substring(1);
372. }
373. final Object elementObj = method.invoke(bean);
374. //System.out.println("###" + key + ":" + elementObj.toString());
375. sb.append('\"');
376. sb.append(key); //不能包含特殊字符
377. sb.append('\"');
378. sb.append(':');
379. sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归
380. sb.append(',');
381. }
382. }
383. catch (final Exception e)
384. {
385. //e.getMessage();
386. throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e);
387. }
388. }
389. if (sb.length() == 1)
390. {
391. return bean.toString();
392. }
393. else
394. {
395. sb.setCharAt(sb.length() - 1, '}');
396. return sb.toString();}
397. }
398. private JsonUtil(){
399. }
400. }