锁屏显示Toast需要2步操作:
1. 添加布局参数FLAG_SHOW_WHEN_LOCKED
params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
2.客制化Textview
View v = LayoutInflater.from(context).inflate(R.layout.layout_custom_toast,
null, false);
代码如下:
ToastUtil.java
private static void setToastLayoutParams(Toast toast) {
WindowManager.LayoutParams params = getWindowParams(toast);
if (params != null) {
params.flags |= WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED;
}
}
private static WindowManager.LayoutParams getWindowParams(Toast toast) {
try {
Method methodGetWindowParam = toast.getClass().getMethod("getWindowParams");
methodGetWindowParam.setAccessible(true);
return (WindowManager.LayoutParams) methodGetWindowParam.invoke(toast);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void show(Context context, String msg, int duration) {
Toast toast = new Toast(context);
View v = LayoutInflater.from(context).inflate(R.layout.layout_custom_toast,
null, false);
((TextView) v.findViewById(R.id.text)).setText(msg);
toast.setView(v);
toast.setDuration(duration);
setToastLayoutParams(toast);
toast.show();
}
layout_custom_toast.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#bf000000"
android:paddingBottom="10dp"
android:paddingLeft="30dp"
android:paddingRight="30dp"
android:paddingTop="10dp"
android:textColor="@android:color/white"/>
</RelativeLayout>