Snackbar

作者: Masson_ | 来源:发表于2016-10-14 15:11 被阅读0次

    原文地址

    个人笔记
    展示一个SnackBar用最外层的view:getwindow().getDecorView()

    ps,无条件的情况下

      /** 
        * 展示一个SnackBar 
        */  
       public void showSnackBar(String message) {  
           final Snackbar snackbar = Snackbar.make(getWindow().getDecorView(), message, Snackbar.LENGTH_INDEFINITE);  
           snackbar.setAction("知道了", new View.OnClickListener() {  
               @Override  
               public void onClick(View v) {  
                   snackbar.dismiss();  
               }  
           }).show();  
       }  
    
    虚拟按键的问题

    1,自定义一个Snackbar的布局,在布局的下方留出这个虚拟按键布局的高度

      /** 
        * 获取屏幕原始尺寸高度,包括虚拟功能键高度 
        */  
       public static int getRawScreenHeight(Context context) {  
           int dpi = 0;  
           WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  
           Display display = windowManager.getDefaultDisplay();  
           DisplayMetrics displayMetrics = new DisplayMetrics();  
           @SuppressWarnings("rawtypes")  
           Class c;  
           try {  
               c = Class.forName("android.view.Display");  
               @SuppressWarnings("unchecked")  
               Method method = c.getMethod("getRealMetrics", DisplayMetrics.class);  
               method.invoke(display, displayMetrics);  
               dpi = displayMetrics.heightPixels;  
           } catch (Exception e) {  
               e.printStackTrace();  
           }  
           return dpi;  
       }  
      
       /** 
        * 获取屏幕高度 
        * 
        * @return 返回当前屏幕高度 
        */  
       public static int getScreenHeight(Context context) {  
           WindowManager manager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);  
           DisplayMetrics metrics = new DisplayMetrics();  
           manager.getDefaultDisplay().getMetrics(metrics);  
           return metrics.heightPixels;  
       }  
      
       /** 
        * 获取虚拟按键栏的高度(有虚拟按键栏时有值,没有虚拟按键栏时返回0) 
        */  
       public static int getBottomStatusHeight(Context context) {  
           int totalHeight = getRawScreenHeight(context);  
      
           int contentHeight = getScreenHeight(context);  
      
           return totalHeight - contentHeight;  
       }  
    

    2,去掉虚拟键

      /** 
        * 展示一个SnackBar 
        */  
       public void showSnackBar(String message) {  
           //去掉虚拟按键  
           getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION  
                   | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION //隐藏虚拟按键栏  
                   | View.SYSTEM_UI_FLAG_IMMERSIVE //防止点击屏幕时,隐藏虚拟按键栏又弹了出来  
           );  
           final Snackbar snackbar = Snackbar.make(getWindow().getDecorView(), message, Snackbar.LENGTH_INDEFINITE);  
           snackbar.setAction("知道了", new View.OnClickListener() {  
               @Override  
               public void onClick(View v) {  
                   snackbar.dismiss();  
                   //隐藏SnackBar时记得恢复隐藏虚拟按键栏
                   getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE);  
               }  
           }).show();  
       }  
    
    <embed src="//music.163.com/style/swf/widget.swf?sid=22677570&type=2&auto=1&width=320&height=66" width="340" height="86"  allowNetworking="all"></embed>
    

    相关文章

      网友评论

          本文标题:Snackbar

          本文链接:https://www.haomeiwen.com/subject/ydogyttx.html