[关闭]
@wangwangheng 2015-10-27T01:46:13.000000Z 字数 2635 阅读 2602

Android犀利小知识点

问题解决


1.Android用Paint计算文字宽度

  1. // 计算出该TextView中文字的长度(像素)
  2. public static float getTextViewLength(TextView textView,String text){
  3. TextPaint paint = textView.getPaint();
  4. // 得到使用该paint写上text的时候,像素为多少
  5. float textLength = paint.measureText(text);
  6. return textLength;
  7. }

2. Android图标

应用程序图标 (Icon)应当是一个 Alpha 通道透明的32位 PNG图片。由于安卓设备众多,一个应用程序图标需要设计几种不同大小,如:

建议在设计过程中,在四周空出几个像素点使得设计的图标与其他图标在视觉上一致,例如:
* 96 x 96 px 图标可以画图区域大小可以设为 88 x 88 px, 四周留出4个像素用于填充(无底色)。
* 72 x 72 px 图标可以画图区域大小可以设为 68 x 68 px, 四周留出2个像素用于填充(无底色)。
* 48 x 48 px 图标可以画图区域大小可以设为 46 x 46 px, 四周留出1个像素用于填充(无底色)。
* 36 x 36 px 图标可以画图区域大小可以设为 34 x 34 px, 四周留出1个像素用于填充(无底色)。

Android 闹钟设置

一般无法接收到开机广播,那么就接收开启屏幕广播(锁屏),重新注册闹钟:ACTION_USER_PRESENT

  1. 在做解锁监听程序时,一开始采用监听屏幕SCREEN_ONSCREEN_OFF这两个action
  2. 但奇怪的是,这两个action只能通过代码动态的形式注册,才能被监听到,使用AndroidManifest.xml 完全监听不到。
  3. 百度后发现这是PowerManager那边在发这个广播的时候做了限制,限制只能有register到代码中的receiver才能接收。
  4. 后来就找各种能静态注册AndroidManifest.xml同时能反映用户解锁行为的广播.于是找到android.intent.action.USER_PRESENT.
  5. 每个用户隔一段时间重新开始使用手机时,首先按电源键点亮屏幕,紧接着解锁。android.intent.action.USER_PRESENT就是解锁时发出的intent.
  6. 于是,监听android.intent.action.USER_PRESENT就能识别用户进入home界面,进而启动想启动的相关服务,包括弹出对话框welcome用户\后台启动程序升级服务等等。
  7. AndroidManifest.xml文件中注册代码
  8. <receiver android:name=".ActionReceiver">
  9. <intent-filter android:priority="90000">
  10. <action android:name="android.intent.action.USER_PRESENT" />
  11. </intent-filter>
  12. </receiver>
  13. 这个intent的说明文档是:
  14. public static final String ACTION_USER_PRESENT
  15. Since: API Level 3
  16. Broadcast Action: Sent when the user is present after device wakes up (e.g when the keyguard is gone).
  17. This is a protected intent that can only be sent by the system.
  18. Constant Value: "android.intent.action.USER_PRESENT"
  19. 翻译过来就是:
  20. 注意这个action只能有系统发出,是在用户唤醒机器的时候才会发出这种action.
  21. 另外, 真的屏幕解锁的时候触发这个广播,而我们接收这个广播会受好多条件的制约。
  22. 比如有些第三方桌面不会真正的锁屏,360LBE等安全软件对广播的拦截等等.
  1. package com.hengeasy.dida.droid.view;
  2. import android.content.Context;
  3. import android.support.v4.view.ViewPager;
  4. import android.util.AttributeSet;
  5. import android.view.MotionEvent;
  6. public class UnscrollableViewPager extends ViewPager {
  7. private boolean isScrollable = false;
  8. public UnscrollableViewPager(Context context) {
  9. super(context);
  10. }
  11. public UnscrollableViewPager(Context context, AttributeSet attrs) {
  12. super(context, attrs);
  13. }
  14. @Override
  15. public boolean onTouchEvent(MotionEvent ev) {
  16. if (isScrollable == false) {
  17. return false;
  18. } else {
  19. return super.onTouchEvent(ev);
  20. }
  21. }
  22. @Override
  23. public boolean onInterceptTouchEvent(MotionEvent ev) {
  24. if (isScrollable == false) {
  25. return false;
  26. } else {
  27. return super.onInterceptTouchEvent(ev);
  28. }
  29. }
  30. public boolean isScrollable() {
  31. return isScrollable;
  32. }
  33. public void setScrollable(boolean isScrollable) {
  34. this.isScrollable = isScrollable;
  35. }
  36. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注