这些,都是Andorid中比较常用的方法和功能,在网上搜集整理一下记录之,以备不时之需。由于经过多次转载,源文作者不确凿,在此申明,敬请见谅。不得不赞,非常实用。

  1. 1、判断sd卡是否存在
  2.  
  3. boolean sdCardExist = Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
  4.  
  5. 2TextView部分文字设置颜色
  6.  
  7. TextView tv = new TextView(this);
  8. //添加css样式
  9. tv.setText(Html.fromHtml("<font color="#ff0000">红色</font>其它颜色"));
  10.  
  11. 3、替换数据库某字段中某些字符的方法:
  12.  
  13. update table set spell=replace(spell,'ɡ','g')
  14.  
  15. 4、单选按钮默认选中:
  16.  
  17. mRadioGroup.check(mRadioButton_1.getId());
  18.  
  19. 下拉列表默认选中:
  20.  
  21. for(int j = 0;j < cities.length;j ++){
  22. if(months[j].equals("湖南")){
  23. mSpinner_m.setSelection(j);
  24. }
  25. }
  26.  
  27. 5TextView中嵌套图片:
  28.  
  29. Drawable draw = getResources().getDrawable(R.drawable.ji_dot_nor);
  30. textView.setCompoundDrawablesWithIntrinsicBounds(null, draw, null, null);
  31.  
  32. 6ListView去掉下拉条:
  33.  
  34. 方法一:在xml属性中设置
  35.  
  36. android:scrollbars="none"
  37. 方法二:在代码中设置:
  38.  
  39. listView.setVerticalScrollBarEnabled(false);
  40.  
  41. 7、设置Activity的风格:
  42.  
  43. //将Activity设置成半透明的效果
  44. android:theme="@android:style/Theme.Translucent"
  45. //将Activity设置成对话框的样式
  46. android:theme="@android:style/Theme.Dialog" <span style="font-family: Arial, Helvetica, sans-serif; white-space: normal; "> <wbr> <wbr> </wbr></wbr></span>
  47.  
  48. 8、创建一个背景模糊的Widow,且将对话框放在前景
  49.  
  50. Window window = dialog.getWindow();
  51. window.setFlags(WindowManager.LayoutParams.FLAG_BLUR_BEHIND,WindowManager.LayoutParams.FLAG_BLUR_BEHIND);
  52.  
  53. 9list滚动时出现黑色底的问题:
  54.  
  55. 解决方法:
  56. 方法一:
  57. XML中设置android:cacheColorHint="#00000000"
  58.  
  59. 方法二:
  60. 在代码中设置listView.setCacheColorHint(0);
  61.  
  62. 10、编辑框中指定输入的类型,设置属性digits即可:
  63.  
  64. 例:只允许输入数字
  65. android:digits="0123456789" android:digits="integer" android:digits="num"
  66.  
  67. 11、利用反射机制,获取drawable文件夹下的图片名称:
  68.  
  69. Field[] fields = R.drawable.class.getDeclaredFields();
  70. for(Field field:fields){
  71. if(!"icon".equals(field.getName())){
  72. sb.append(field.getName() + "\t");
  73. }
  74. }
  75. mTextView.setText(sb.toString());
  76.  
  77. 12、缓冲流播放MP3
  78.  
  79. MediaPlayer player = new MediaPlayer();
  80. try {
  81. player.setDataSource(WebMusic.this, Uri.parse("歌曲地址"));
  82. player.prepare();
  83. player.start();
  84. } catch (IllegalArgumentException e) {
  85. e.printStackTrace();
  86. } catch (SecurityException e) {
  87. e.printStackTrace();
  88. } catch (IllegalStateException e) {
  89. e.printStackTrace();
  90. } catch (IOException e) {
  91. e.printStackTrace();
  92. }
  93.  
  94. 13、下面的代码可以用来点亮屏幕:
  95.  
  96. PowerManager pm = (PowerManager)getSystemService(POWER_SERVICE);
  97. mWakelock = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP |PowerManager.SCREEN_DIM_WAKE_LOCK, "SimpleTimer");
  98. mWakelock.acquire();
  99. ...............
  100. mWakelock.release();
  101.  
  102. 下面的代码用来屏幕解锁:
  103.  
  104. KeyguardManager keyguardManager = (KeyguardManager)getSystemService(KEYGUARD_SERVICE);
  105. KeyguardLock keyguardLock = keyguardManager.newKeyguardLock("");
  106. BkeyguardLock.disableKeyguard();
  107.  
  108. 使用这两段代码,需要在AndroidManifest文件中加入以下权限:
  109.  
  110. <uses-permission android:name="android.permission.DISABLE_KEYGUARD"></uses-permission>
  111. <uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>
  112.  
  113. 14android 跑马灯效果做如下设置即可:
  114.  
  115. android:scrollHorizontally="true"
  116. android:marqueeRepeatLimit="marquee_forever"
  117. android:ellipsize="marquee"
  118. android:focusable="true"
  119. android:focusableInTouchMode="true"
  120. android:singleLine="true"
  121.  
  122. 15、拦截短信:
  123. android系统接收到短信时,会发送一个广播BroadcastReceiver,这个广播是以有序广播的形式发送的。
  124. 所谓的有序广播就是广播发出后,接收者是按照设置的优先级一个一个接着接收,前面的接收者可以选择是否终止这条广播以使后面的接收者接收不到,而普遍广播发送 后所有的接收者都能同时接到,但是不能终止这条广播,也不能将它的处理结果传递给下个接收者。
  125. sms拦截就是通过实现一个BroadcastReceiver并将其的优先级设置的比系统sms接收者高。
  126. android:priority就是设置优先级的,设置为100即可:
  127.  
  128. <receiver android:name="InterceptSMS">
  129. <intent-filter android:priority="100">
  130. <action android:name="android.provider.Telephony.SMS_RECEIVED"/>
  131. </intent-filter>
  132. </receiver>
  133.  
  134. 16、如果在文件夹下选择视频文件时,想调用自己的播放器,需要在Manifest.xml中设置过滤器,设置如下:
  135.  
  136. <intent-filter>
  137. <action android:name="android.intent.action.VIEW" />
  138. <category android:name="android.intent.category.DEFAULT"/>
  139. <data android:mimeType="video/*"/>
  140. </intent-filter>
  141.  
  142. 如果想在浏览器中调用自己的播放器,设置如下:
  143.  
  144. <intent-filter>
  145. <action android:name="android.intent.action.VIEW" />
  146. <category android:name="android.intent.category.DEFAULT"/>
  147. <category android:name="android.intent.category.BROWSABLE" />
  148. <data android:mimeType="video/*" android:scheme="http"/>
  149. </intent-filter>
  150.  
  151. 如果两者都要实现的话,就必须配两个过滤器。
  152.  
  153. 17、显示图片时,用mImageView.setScaleType(ImageView.ScaleType.FIT_XY); 可以填充整个区域。
  154.  
  155. 18、保持屏幕长开:
  156.  
  157. getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
  158.  
  159. 开启、关闭屏幕时发送的广播:
  160.  
  161. <receiver android:name=".MyBroadcastReceiver" android:enabled="true">
  162. <intent-filter>
  163. <action android:name="android.intent.action.ACTION_SCREEN_ON"></action>
  164. <action android:name="android.intent.action.ACTION_SCREEN_OFF"></action>
  165. </intent-filter>
  166. </receiver>
  167.  
  168. 19、判断一个intent是否可用:
  169.  
  170. public static boolean isIntentAvailable(Context context, String action) {
  171. final PackageManager packageManager = context.getPackageManager();
  172. final Intent intent = new Intent(action);
  173. List<ResolveInfo> list = packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);
  174. return list.size() > 0;
  175. }
  176.  
  177. 上述代码判断actionintent是否可用
  178. (备注,也可以得到相应intent的应用程序信息)
  179.  
  180. 我们可以根据scanAvailable 来判断是否让用户操作来发送该intent:
  181.  
  182. boolean bool = isIntentAvailable(gallery.this,ACTION);
  183. if(bool){
  184. Intent intent = new Intent(ACTION);
  185. intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
  186. startActivity(intent);
  187. }
  188.  
  189. 20、获取所有桌面应用的图标:
  190.  
  191. private List<Drawable> getImage(){
  192. PackageManager packageManager = this.getPackageManager();
  193. Intent intent = new Intent(Intent.ACTION_MAIN);
  194. intent.addCategory(Intent.CATEGORY_LAUNCHER);
  195. List<ResolveInfo> infos = packageManager.queryIntentActivities(intent, 0);
  196. for(ResolveInfo info : infos){
  197. ActivityInfo ai = info.activityInfo;
  198. Drawable icon = ai.loadIcon(packageManager);
  199. list.add(icon);
  200. }
  201. return list;
  202. }
  203.  
  204. 21Android 系统图片数据库:
  205.  
  206. Uri STORAGE_URI = Images.Media.EXTERNAL_CONTENT_URI;
  207.  
  208. 往改数据库中插入数据,用到了内容提供者,大致如下:
  209. view plaincopy
  210. ContentValues values = new ContentValues(11);
  211. values.put(Images.Media.TITLE, title);
  212. values.put(Images.Media.DISPLAY_NAME, filename);
  213. values.put(Images.Media.DATE_TAKEN, dateTaken);
  214. values.put(Images.Media.DATE_MODIFIED, dateTaken);
  215. values.put(Images.Media.DATE_ADDED, dateAdded);
  216. values.put(Images.Media.MIME_TYPE, "image/jpeg");
  217. values.put(Images.Media.ORIENTATION, degree[0]);
  218. values.put(Images.Media.DATA, filePath);
  219. values.put(Images.Media.SIZE, size);
  220. values.put(Images.Media.LATITUDE, latitude.floatValue());
  221. values.put(Images.Media.LONGITUDE, longitude.floatValue());
  222.  
  223. ContentResolver contentResolver = getContentResolver();
  224. contentResolver.insert(STORAGE_URI, values);
  225.  
  226. //插入数据后刷新一下:
  227. getContentResolver().notifyChange(STORAGE_URI, null);
  228.  
  229. 22、获取UI控件的宽、高:
  230.  
  231. 在前面几个周期函数中都无法获取宽度和高度值,但在事件中或用定时器可以获取,如下:
  232.  
  233. public void onCreate(Bundle savedInstanceState) {
  234. super.onCreate(savedInstanceState);
  235. setContentView(R.layout.main);
  236.  
  237. text = (TextView) findViewById(R.id.text);
  238. btn = (Button) findViewById(R.id.btn);
  239. btn.setOnClickListener(new Button.OnClickListener(){
  240. @Override
  241. public void onClick(View v) {
  242. int width = text.getWidth();
  243. int height = text.getHeight();
  244. Log.i("Log: ", "----------->"+width + " | " + height);
  245. }
  246. });
  247. }
  248.  
  249. 23、判断某一服务是否在运行:
  250.  
  251. //serviceName:即包名+服务的名称
  252. //return:某一服务正在运行,返回true,否则返回false
  253. public boolean isRunning(Context c,String serviceName){
  254. ActivityManager myAM=(ActivityManager)c.getSystemService(Context.ACTIVITY_SERVICE);
  255. ArrayList<RunningServiceInfo> runningServices = (ArrayList<RunningServiceInfo>)myAM.getRunningServices(40);
  256. //获取最多40个当前正在运行的服务,放进ArrList里
  257. for(int i = 0 ; i<runningServices.size();i++){ //循环枚举对比
  258. if(runningServices.get(i).service.getClassName().toString().equals(serviceName)){
  259. return true;
  260. }
  261. }
  262. return false;
  263. }
  264.  
  265. 24、根据角度求正弦值:
  266.  
  267. Math.sin(Math.PI/2)
  268.  
  269. 根据正弦值求角度:
  270. Math.toDegrees(Math.asin(1.0))
  271.  
  272. 其他求法同上
  273.  
  274. 25、画图时,设置画布抗锯齿:
  275.  
  276. canvas.setDrawFilter(new PaintFlagsDrawFilter(0,Paint.ANTI_ALIAS_FLAG|Paint.FILTER_BITMAP_FLAG));
  277.  
  278. 26、让ListView的滚动条定位到最后一行
  279. 设置以下两个属性:
  280.  
  281. android:stackFromBottom="true"
  282. android:transcriptMode="alwaysScroll"
  283.  
  284. 27、获取系统所有包的信息:
  285.  
  286. List<PackageInfo> pkgs = AndroidDemo.this.getPackageManager().getInstalledPackages(0);
  287. for (int i=0; i<pkgs.size(); i++) {
  288. PackageInfo info = new PackageInfo();
  289. info = pkgs.get(i);
  290. label = info.applicationInfo.loadLabel(getPackageManager()).toString();
  291. mPackageInfoList.add(label);
  292. System.out.println("label----------->" + label);
  293. }
  294.  
  295. 28、如何判断一个应用是系统应用???
  296.  
  297. private boolean isDefaultApplication(String packageName) {
  298. boolean flag = false;
  299. boolean isDefault = false;
  300. PackageManager pckMan = mLauncher.getPackageManager();
  301. List<PackageInfo> packs = pckMan.getInstalledPackages(0);
  302. int count = packs.size();
  303. for (int i = 0; i < count && !flag; i++) {
  304. PackageInfo p = packs.get(i);
  305. ApplicationInfo appInfo = p.applicationInfo;
  306. if (packageName.equals(appInfo.packageName)) {
  307. if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0) {
  308. isDefault = true;
  309. }
  310. flag = true;
  311. }
  312. }
  313. return isDefault;
  314. }
  315.  
  316. 核心判断:
  317.  
  318. if ((appInfo.flags & ApplicationInfo.FLAG_SYSTEM) > 0){
  319. //系统应用
  320. }else{
  321. //用户安装的
  322. }
  323.  
  324. 29、卸载应用:
  325.  
  326. //包名:package + 具体包路径
  327. Uri packageURI = Uri.parse("package:com.android.myapp");
  328. Intent uninstallIntent = new Intent(Intent.ACTION_DELETE, packageURI);
  329. startActivity(uninstallIntent);
  330.  
  331. 30、检查网络状态:
  332.  
  333. //return true表示有网络可用,dalse表示无网络可用
  334. public static boolean checkNetwork(){
  335. // 检查网络连接,如果无网络可用,就不需要进行连网操作等
  336. final NetworkInfo info = mConnectivity.getActiveNetworkInfo();
  337. if (info == null) {
  338. return false;
  339. }
  340. //判断网络连接类型,是WIFI网络还是3G网络
  341. final int netType = info.getType();
  342. if (netType == ConnectivityManager.TYPE_WIFI) {
  343. return info.isConnected();
  344. } else if (netType == ConnectivityManager.TYPE_MOBILE && !mTelephony.isNetworkRoaming()) {
  345. return info.isConnected();
  346. } else {
  347. return false;
  348. }
  349. }
  350.  
  351. 31、获取本地apk文件的包名:
  352.  
  353. public void getApkInfo(){
  354. String apkPath ="/sdcard/JXT_calendar.apk";
  355. PackageManager pm = GetApkInfo.this.getPackageManager();
  356. PackageInfo info = pm.getPackageArchiveInfo(apkPath, PackageManager.GET_ACTIVITIES);
  357. if (info != null) {
  358. ApplicationInfo appInfo = info.applicationInfo;
  359. Drawable icon = pm.getApplicationIcon(appInfo);
  360. image.setImageDrawable(icon);
  361. packageName = appInfo.packageName;
  362. text.setText("package: " + packageName);
  363. }
  364. }
  365.  
  366. 32、捕获Home键,重写onAttachedToWindow()方法,在方法里面setType 即可,去掉之后就无法捕获Home键:
  367.  
  368. @Override
  369. public void onAttachedToWindow() {
  370. // TODO Auto-generated method stub
  371. this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);
  372. super.onAttachedToWindow();
  373. }
  374. @Override
  375. public boolean onKeyDown(int keyCode, KeyEvent event) {
  376. // TODO Auto-generated method stub
  377. if(keyCode == KeyEvent.KEYCODE_HOME) {
  378. //不做任何操作
  379. }
  380. return false;
  381. }
  382.  
  383. 33Notification通知如何点击后自动消失:
  384. 代码中加上notification.flags |= Notification.FLAG_AUTO_CANCEL 即可
  385. Notification通知无清楚按钮,如音乐播放时的状态:
  386. 代码中加上notification.flags |= Notification.FLAG_NO_CLEAR 即可
  387.  
  388. 34、横竖屏切换时候activity的生命周期android:configChanges
  389.  
  390. 不设置Activityandroid:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次
  391. 设置Activityandroid:configChanges="orientation"时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次
  392. 设置Activityandroid:configChanges="orientation|keyboardHidden"时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged方法
  393.  
  394. 35、获取默认的应用图标:
  395.  
  396. private PackageManager mPackageManager;
  397. mPackageManager = getPackageManager();
  398. Drawable d = mPackageManager.getDefaultActivityIcon();
  399. Bitmap b = Bitmap.createBitmap(Math.max(d.getIntrinsicWidth(), 1),Math.max(d.getIntrinsicHeight(), 1),Bitmap.Config.ARGB_8888);
  400.  
  401. 36、优化Dalvik虚拟机的堆内存分配:
  402.  
  403. 对于Android平台来说,其托管层使用的Dalvik Java VM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,
  404. 使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法:
  405. view plaincopy
  406. private final static float TARGET_HEAP_UTILIZATION = 0.75f;
  407.  
  408. 在程序onCreate时调用一下代码即可:
  409.  
  410. VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);
  411.  
  412. Android堆内存也可自己定义大小:
  413.  
  414. private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;
  415. (可参考Lanucher源码中LauncherApplication.java文件中使用)
  416.  
  417. //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理
  418. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE);
  419. // 查看剩余的内存容量。
  420. Runtime.getRuntime().freeMemory();
  421.  
  422. 37PopupWindow 的使用:
  423. 显示PopupWindow 的代码如下:
  424.  
  425. public void showPopupWindow(){
  426. //获取上下文环境
  427. Context context = PopupWindowCalendar.this;
  428. //获取系统服务
  429. LayoutInflater fliter = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
  430. //加载自定义的布局文件date_layout.xml
  431. View calendarWindow = fliter.inflate(R.layout.date_popup, null);
  432. //new 一个PopupWindow ,参数一:将加载的布局放在PopupWindow中显示;参数二:设置宽度;参数三:设置高度;参数四:获取焦点
  433. final PopupWindow popupWindow = new PopupWindow(calendarWindow, LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT, true);
  434. //设置背景(此处设置是当点击PopupWindow之外的区域或按back键时隐藏该PopupWindow)
  435. ColorDrawable dw = new ColorDrawable(-00000);
  436. popupWindow.setBackgroundDrawable(dw);
  437. //显示PopupWindow的位置,参数一:父亲的view,即底层Activity根布局的id;参数二:显示的位置,如左上角;参数三:在参数二的基础上x、y坐标的偏移
  438. popupWindow.showAtLocation(findViewById(R.id.main), Gravity.LEFT|Gravity.TOP, 150, 200);
  439. }
  440.  
  441. 隐藏PopupWindow 的代码:
  442.  
  443. popupWindow.dismiss();
  444.  
  445. 38Android ListView的美化方法:
  446.  
  447. listview在拖动的时候背景图片消失变成黑色背景。等到拖动完毕我们自己的背景图片才显示出来
  448. 代码结解决android:scrollingCache=”false
  449. listview的上边和下边有黑色的阴影
  450. 代码解决:android:fadingEdge=”none
  451. lsitview的每一项之间需要设置一个图片做为间隔
  452. 代码解决: android:divider=”@drawable/list_driver 其中 @drawable/list_driver 是一个图片资源
  453. 自定义listview的时候,会出现下面选中一个空间黑色底色的情况,破坏整体美观度
  454. 代码解决:android:cacheColorHint=“#00000000
  455. 默认显示选中的item为橙黄底色,有时候我们需要去掉这种效果
  456. 代码解决:android:listSelector属性.
  457.  
  458. 39
  459. AndroidManifest.xml文件中设置android:launchMode="singleInstance" ,可以保证栈中每个Activity只有一个实例,防止重复界面的不断加载。
  460. 单纯的跳转页面时是可以处理的,但是跳转界面需要传值时就会出问题,这样处理只会将后台的Activity启动,传递的值是无法获取并重新加载的,
  461. 如:ActivityA ——> ActivityB ——(搜索关键字)——> ActivityA (当我从ActivityB传递关键字到ActivityA时,只是将栈底的ActivityA放在了栈顶,并不会做其他操作)
  462. 如果既要保证每个Activity只有一个实例,又可以传递数据,可以在跳转界面的代码处加上下面一句话:
  463.  
  464. intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  465. 这样处理,就是在跳转的时候将堆栈中该Activity前面的所有Activity都清除,并重新发intent将此Activity启动,因此就可以获取传递过来的数据进行相关处理。
  466.  
  467. 40、线程问题:
  468.  
  469. The content of the adapter has changed but ListView did not receive a notification.
  470. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread
  471. 解决问题的方法:
  472.  
  473. 这个错误经常出现在Activity休眠起来之后,主要还是使用adapter不太小心造成的,有时候我们获取数据都使用后台线程操作,
  474. Activity休眠时,后台线程还在运行,唤醒Activity时再次操作该数据就会报这个错,原因就是数据在后台改变了但界面没有刷新。
  475. Activity从休眠状态被唤醒时会调用onResume()方法,我们可以在onResume()方法中进行数据的刷新notifyDataSetChanged,如下操作:
  476.  
  477. @Override
  478. protected void onResume() {
  479. super.onResume();
  480. Log.e("onResume", "------------>onResume");
  481. //这个错误经常出现在Activity休眠起来之后,休眠起来时会调用onResume(),调notifyDataSetChanged可以解决改问题
  482. if(securitiesAdapter != null){
  483. securitiesAdapter.notifyDataSetChanged();
  484. }
  485. }
  486.  
  487. 41、保留小数点后两位:
  488.  
  489. DecimalFormat formater = new DecimalFormat("#0.##");
  490. System.out.println(formater.format(123456.7897456));
  491.  
  492. 42、判断耳机状态:
  493.  
  494. public class ServiceReceiver extends BroadcastReceiver {
  495. public void onReceive(Context context, Intent intent) {
  496. if (Intent.ACTION_HEADSET_PLUG.equals(intent.getAction())) {
  497. try {
  498. if (intent.getIntExtra("state", 0) == 0) {
  499. Log.e("caculate broadcast", "headset off");
  500. bHeadsetOn = false;
  501. } else if (intent.getIntExtra("state", 0) == 1) {
  502. Log.e("headset", "headset on");
  503. bHeadsetOn = true;
  504. }
  505. } catch (Exception e) {
  506. e.printStackTrace();
  507. }
  508. }
  509. }
  510. }
  511.  
  512. 43、异步任务调用时,先判断是否在运行,如果正在运行,则先取消该任务,然后再开启
  513.  
  514. if(searchTask.getStatus() == AsyncTask.Status.RUNNING){
  515. searchTask.cancel(true);
  516. }
  517. searchTask = new SearchTask();
  518. searchByKey(sSearchKey);
  519.  
  520. 44、黑屏后音频播放会有停顿的问题:
  521.  
  522. PowerManager mPowerManager = (PowerManager) getSystemService(POWER_SERVICE);
  523. PowerManager.WakeLock mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "media");
  524. 播放时:
  525.  
  526. if (!mWakeLock.isHeld()){
  527. mWakeLock.acquire();
  528. }
  529. 停止时:
  530.  
  531. if (mWakeLock.isHeld()){
  532. mWakeLock.release();
  533. }
  534.  
  535. 权限:
  536.  
  537. <uses-permission android:name="android.permission.WAKE_LOCK"/>
  538. <uses-permission android:name="android.permission.DEVICE_POWER"/>
  539.  
  540. 45、当ViewFlipper touch 事件冲突时,ViewFlipper的滑屏事件会被touch 事件拦截,解决方法如下:
  541.  
  542. public boolean onTouchEvent(MotionEvent event) {
  543. // 执行touch 事件
  544. super.onTouchEvent(event);
  545. return this.detector.onTouchEvent(event);
  546. }
  547. //这个方法会先执行,当返回为true时,才执行onTouchEvent 方法
  548. public boolean dispatchTouchEvent(MotionEvent ev){
  549. //先执行滑屏事件
  550. detector.onTouchEvent(ev);
  551. super.dispatchTouchEvent(ev);
  552. return true;
  553. }
  554.  
  555. 46
  556. 查询图片,Uri地址为:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
  557. 查询音乐,Uri地址为:MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
  558.  
  559. 47
  560. TextView底部加横线:
  561.  
  562. mTextView.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG);
  563. TextView中间加横线:
  564.  
  565. mTextView.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG|Paint.ANTI_ALIAS_FLAG);

  

(转)Android之常用功能方法大集合的更多相关文章

  1. Android android-common 常用功能和工具集合

    本文内容 环境 android-common 项目结构 演示 android-common 参考资料 android-common 主要包括如下内容: 缓存,包括图片缓存.预取缓存.网络缓存. 公共 ...

  2. javascript功能插件大集合 前端常用插件 js常用插件

    转载来源:https://github.com/jobbole/aw... 包管理器管理着 javascript 库,并提供读取和打包它们的工具.•npm – npm 是 javascript 的包管 ...

  3. javascript功能插件大集合,写前端的亲们记得收藏

    伯乐在线已在 GitHub 上发起「JavaScript 资源大全中文版」的整理.欢迎扩散.欢迎加入. https://github.com/jobbole/awesome-javascript-cn ...

  4. 转载 Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

  5. Android 多线程处理之多线程用法大集合

    handler.post(r)其实这样并不会新起线程,只是执行的runnable里的run()方法,却没有执行start()方法,所以runnable走的还是UI线程. 1.如果像这样,是可以操作ui ...

  6. Android EditeText常用功能盘点

    这篇集合了项目里经常用到的EditText的需求,以前单个问题总结过,现在放在一起以备后患啊,主要包含以下方面: 1. 判断输入字符长度 2. 键盘的显示与隐藏 3. 对输入内容的限制,列举几种常见的 ...

  7. Android ——多线程处理之多线程用法大集合(转)

    原文地址:http://blog.csdn.net/jie1991liu/article/details/16961701 另一篇地址:http://blog.sina.com.cn/s/blog_7 ...

  8. Android中常用的5大布局详述

    Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面. 所有的布局方式都可以归类为ViewGroup的 ...

  9. JavaScript数组方法大集合

    JavaScript数组方法集合 本文总结一下js数组处理用到的所有的方法.自己做个笔记. 数组方法 concat() 合并两个或多个数组 concat()能合并两个或者多个数组,不会更改当前数组,而 ...

随机推荐

  1. thinkphp 模板显示display和assign的用法

    this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论何种变量类型都统一使用 assign 赋值 $this-> ...

  2. axTE3DWindowEx双屏对比控件白屏解决方法以及网上方法的校正(CreateControlOveride)

    环境:vs2012,TE 6.5.1,winfrom C# 要做skyline的双屏显示功能,网上找到方法是用axTE3DWindowEx控件实现,把控件拖进去,运行,发现axTE3DWindow是正 ...

  3. SCCM符合性设置

    符合性设置--可以针对注册表值.脚本.文件系统.补丁更新情况进行符合性检查,除了在报表中查看结果外,还可以在CCM客户端 的 配置 中查看符合性评估结果,适合排错1.配置项目---新建针对 注册表值. ...

  4. ProbS CF matlab源代码(二分系统)(原创作品,转载注明出处,谢谢!)

    %ProbS clear all;%% 数据读入与预处理 data = load('E:\network_papers\u1.base');test = load('E:\network_papers ...

  5. C++经典面试题

    1.int a=5,则 ++(a++)的值是() A.5      B.   6          C.7       D.逻辑错误 a++返回的是一个暂时变量,这里是右值,不能再前面++了 2.以下 ...

  6. EasyUI-在iframe里获取现阶段选中的tab的标题

    在iframe里获取当前选中的tab的标题(easyui) var currTab =$$('#tabs').tabs('getSelected'); console.info(currTab.pan ...

  7. IOS 7 Study - UISegmentedControl

    You would like to present a few options to your users from which they can pick anoption, through a U ...

  8. C#类的成员初始化顺序

    首先我们来看看引用类型的成员初始化过程 我们来看一个例子吧 class Program {     static void Main(string[] args)     {         Driv ...

  9. iOS开发——高级UI之OC篇&UIdatePicker&UIPickerView简单使用

    UIdatePicker&UIPickerView简单使用 /***************************************************************** ...

  10. iOS开发——数据持久化Swift篇&(一)NSUserDefault

    NSUserDefault //******************** 5.1 NSUserDefault和对象归档 func useNSUserDefault() { //通过单利来创建一个NSU ...