Snackbar

2016-10-14  本文已影响0人  Masson_

原文地址

个人笔记
展示一个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>
上一篇下一篇

猜你喜欢

热点阅读