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