android小知识积累

小知识的积累,方便自己随时查看!

1. android透明度对应百分比数字

百分比 十六进制
100% FF
99% FC
98% FA
97% F7
96% F5
95% F2
94% F0
93% ED
92% EB
91% E8
90% E6
89% E3
88% E0
87% DE
86% DB
85% D9
84% D6
83% D4
82% D1
81% CF
80% CC
79% C9
78% C7
77% C4
76% C2
75% BF
74% BD
73% BA
72% B8
71% B5
70% B3
69% B0
68% AD
67% AB
66% A8
65% A6
64% A3
63% A1
62% 9E
61% 9C
60% 99
59% 96
58% 94
57% 91
56% 8F
55% 8C
54% 8A
53% 87
52% 85
51% 82
50% 80
49% 7D
48% 7A
47% 78
46% 75
45% 73
44% 70
43% 6E
42% 6B
41% 69
40% 66
39% 63
38% 61
37% 5E
36% 5C
35% 59
34% 57
33% 54
32% 52
31% 4F
30% 4D
29% 4A
28% 47
27% 45
26% 42
25% 40
24% 3D
23% 3B
22% 38
21% 36
20% 33
19% 30
18% 2E
17% 2B
16% 29
15% 26
14% 24
13% 21
12% 1F
11% 1C
10% 1A
9% 17
8% 14
7% 12
6% 0F
5% 0D
4% 0A
3% 08
2% 05
1% 03
0% 00

2. 代码设置shape背景

public static void createShare(View view, int radiusPx, int strokeWidth, int strokeColor) {
    GradientDrawable drawable = new GradientDrawable();
    drawable.setCornerRadius(radiusPx);
    drawable.setStroke(strokeWidth, strokeColor);
    if(Build.VERSION.SDK_INT < 16){
      view.setBackgroundDrawable(drawable);
    }else{
      view.setBackground(drawable);
    }
}

创建渐变色

int colors[] = { 0xff255779 , 0xff3e7492, 0xffa6c0cd };//分别为开始颜色,中间夜色,结束颜色

GradientDrawable gd = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors);

3. shape xml渐变色属性详解

<gradient  
        android:angle="90"  
        android:centerColor="#9ACD32"  
        android:endColor="#9AC0CD"  
        android:startColor="#9AFF9A"  
        android:type="linear"  
        android:useLevel="false" />

1. android:angle="90"表示渐变的起始位置,这个值必须为45的倍数,包
括0,0表示从左往右渐变,逆时针旋转,依次是45,90,135.....,90表
示从下往上渐变,270表示从上往下渐变,剩下的大家依次去推理。
2. android:startColor="#9AFF9A",表示渐变的起始颜色
3. android:centerColor="#9ACD32"表示渐变的过渡颜色
4. android:endColor="#9AC0CD"表示渐变的结束颜色
5. type表示渐变的类型,有三种,分别是linear(线性变化),radial(辐
射渐变)以及sweep(扫描渐变)
当type为radial时,我们要设置android:gradientRadius="",这个表示渐变    
的半径(线性渐变和扫描渐变不需要设置)

4. android 7.x 以上 PopupWindow 的showAsDropDown失效处理方案

a). 重写showAsDropDown方法:
      @Override
       public void showAsDropDown(View anchor) {
       if(Build.VERSION.SDK_INT == 24) {
            Rect rect = new Rect();
            anchor.getGlobalVisibleRect(rect);
            int h = anchor.getResources().getDisplayMetrics().heightPixels - rect.bottom;
            setHeight(h);
          }
        super.showAsDropDown(anchor);
        }
  
 b). 使用showAtLocation方法:
      if (Build.VERSION.SDK_INT >= 24) {
            int[] point = new int[2];
            v.getLocationInWindow(point);
            mPopWindow.showAtLocation(((Activity) mContext).getWindow().getDecorView(), Gravity.NO_GRAVITY, 0, point[1] + v.getHeight());
        } else {
            mPopWindow.showAsDropDown(v);
        }

5. Android 监听wifi状态-->注册广播(动态注册和静态注册)

class NetworkConnectChangedReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            // 这个监听wifi的打开与关闭,与wifi的连接无关
             if (WifiManager.WIFI_STATE_CHANGED_ACTION
                 .equals(intent.getAction())) {
                 int wifiState = intent
                 .getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
                 EvtLog.e(TAG, "wifiState" + wifiState);
                 switch (wifiState) {
                    case WifiManager.WIFI_STATE_DISABLED:

                        break;
                    case WifiManager.WIFI_STATE_DISABLING:

                        break;
                    case WifiManager.WIFI_STATE_ENABLING:
                        break;
                    case WifiManager.WIFI_STATE_ENABLED:
                        break;
                    case WifiManager.WIFI_STATE_UNKNOWN:
                        break;
                    default:
                        break;
                }
            }
// 这个监听wifi的连接状态即是否连上了一个有效无线路由,当上边广播的状态是WifiManager
// .WIFI_STATE_DISABLING,和WIFI_STATE_DISABLED的时候,根本不会接到这个广播。
// 在上边广播接到广播是WifiManager.WIFI_STATE_ENABLED状态的同时也会接到这个广播,
// 当然刚打开wifi肯定还没有连接到有效的无线
        if (WifiManager.NETWORK_STATE_CHANGED_ACTION
           .equals(intent.getAction())) {
                Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                if (null != parcelableExtra) {
                    NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
                    NetworkInfo.State state = networkInfo.getState();
                    boolean isConnected = state == NetworkInfo.State.CONNECTED;// 当然,这边可以更精确的确定状态
                    EvtLog.e(TAG, "isConnected" + isConnected);
                    if (isConnected) {

                    } else {

                    }
                }
            }
//这个监听网络连接的设置,包括wifi和移动数据的打开和关闭。.
//最好用的还是这个监听。wifi如果打开,关闭,以及连接上可用的连接都会接到监听。见log
//这个广播的最大弊端是比上边两个广播的反应要慢,如果只是要监听wifi,我觉得还是用上边两个配合比较合适
        if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
            ConnectivityManager manager = (ConnectivityManager) context
                    .getSystemService(Context.CONNECTIVITY_SERVICE);
                EvtLog.i(TAG, "CONNECTIVITY_ACTION");
                assert manager != null;
                NetworkInfo activeNetwork = manager.getActiveNetworkInfo();
                if (activeNetwork != null) { // connected to the internet
                    if (activeNetwork.isConnected()) {
                        if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) {
                            // connected to wifi
                            EvtLog.e(TAG, "当前WiFi连接可用 ");
                        } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) {
                            // connected to the mobile provider's data plan
                            EvtLog.e(TAG, "当前移动网络连接可用 ");
                        }
                    } else {
                        EvtLog.e(TAG, "当前没有网络连接,请确保你已经打开网络 ");
                    }
                        EvtLog.e(TAG, "info.getTypeName()" + activeNetwork.getTypeName());
                        EvtLog.e(TAG, "getSubtypeName()" + activeNetwork.getSubtypeName());
                        EvtLog.e(TAG, "getState()" + activeNetwork.getState());
                        EvtLog.e(TAG, "getDetailedState()"
                        + activeNetwork.getDetailedState().name());
                        EvtLog.e(TAG, "getDetailedState()" + activeNetwork.getExtraInfo());
                        EvtLog.e(TAG, "getType()" + activeNetwork.getType());
                  } else {   // not connected to the internet
                        EvtLog.e(TAG, "当前没有网络连接,请确保你已经打开网络 ");
                }
            }
        }

    }

6. 系统activity的打开方式:

  • 调用系统分享

    //分享文字  
    public void shareText(View view) {  
        Intent shareIntent = new Intent();  
        shareIntent.setAction(Intent.ACTION_SEND);  
        shareIntent.putExtra(Intent.EXTRA_TEXT, "This is my Share text.");  
        shareIntent.setType("text/plain");  
        
        //设置分享列表的标题,并且每次都显示分享列表  
        startActivity(Intent.createChooser(shareIntent, "分享到"));  
      }  
    
      //分享单张图片  
      public void shareSingleImage(View view) {  
          String imagePath = Environment.getExternalStorageDirectory() + File.separator + "test.jpg";  
          //由文件得到uri  
          Uri imageUri = Uri.fromFile(new File(imagePath));  
          Log.d("share", "uri:" + imageUri);  //输出:file:///storage/emulated/0/test.jpg  
    
          Intent shareIntent = new Intent();  
          shareIntent.setAction(Intent.ACTION_SEND);  
          shareIntent.putExtra(Intent.EXTRA_STREAM, imageUri);  
          shareIntent.setType("image/*");  
          startActivity(Intent.createChooser(shareIntent, "分享到"));  
      }  
    
      //分享多张图片  
      public void shareMultipleImage(View view) {  
          ArrayList<Uri> uriList = new ArrayList<>();  
          
          String path = Environment.getExternalStorageDirectory() + File.separator;  
          uriList.add(Uri.fromFile(new File(path+"australia_1.jpg")));  
          uriList.add(Uri.fromFile(new File(path+"australia_2.jpg")));  
          uriList.add(Uri.fromFile(new File(path+"australia_3.jpg")));  
            
          Intent shareIntent = new Intent();  
          shareIntent.setAction(Intent.ACTION_SEND_MULTIPLE);  
          shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriList);  
          shareIntent.setType("image/*");  
          startActivity(Intent.createChooser(shareIntent, "分享到"));  
      }  
    
  • 系统相机以及系统相册选取功能

  • 系统拨号页面的打开方式:

    Intent intent =new Intent();
    intent.setAction("android.intent.action.CALL_BUTTON");
    startActivity(intent);
    
    Uri uri = Uri.parse("tel:xxxxxx");
    Intent intent = new Intent(Intent.ACTION_DIAL, uri);
    startActivity(intent);
     -->到应用
    Intent intent= new Intent("android.intent.action.DIAL");
    intent.setClassName("com.android.contacts","com.android.contacts.DialtactsActivity");
    
  • 系统通话记录

    Intent intent=new Intent();
    intent.setAction(Intent.ACTION_CALL_BUTTON);
    startActivity(intent); 
    
  • 联系人页面

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_VIEW);
    intent.setData(Contacts.People.CONTENT_URI);
    startActivity(intent);
    -->到应用
    Intent intent= new Intent("com.android.contacts.action.LIST_STREQUENT");
    intent.setClassName("com.android.contacts","com.android.contacts.DialtactsActivity");
    
  • 调用联系人界面

    Intent intent = new Intent();
    intent.setAction(Intent.ACTION_PICK);
    intent.setData(Contacts.People.CONTENT_URI);
    startActivity(intent); 
    
  • 插入联系人界面

    Intent intent=new Intent(Intent.ACTION_EDIT,
    Uri.parse("content://com.android.contacts/contacts/"+"1"));
    startActivity(intent);
    
  • 到联系人列表页面

    Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
    intent.setType("vnd.android.cursor.item/person");
    intent.setType("vnd.android.cursor.item/contact");
    intent.setType("vnd.android.cursor.item/raw_contact");
    intent.putExtra(android.provider.ContactsContract.Intents.Insert.NAME, name);
    intent.putExtra(android.provider.ContactsContract.Intents.Insert.COMPANY,company);
    intent.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE, tel);
    intent.putExtra(android.provider.ContactsContract.Intents.Insert.PHONE_TYPE, 3);
    
  • 到短信界面

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setType("vnd.android-dir/mms-sms");
    //intent.setData(Uri.parse("content://mms-sms/conversations/"));//此为号码
    startActivity(intent);
    -->到应用
    Intent intent = new Intent("android.intent.action.CONVERSATION");
    startActivity(intent); 
    

7. 即使拉取手机错误日志:

adb bugreport ~/Destop

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容