新建一个Java
public void SM(View view, String str) {
Snackbar snackbar = Snackbar.make(view, str, 800);
View snackBarView = snackbar.getView();
snackbar.setTextColor(Color.RED);//设置文字颜色
snackbar.getView().setBackgroundResource(R.drawable.shadow);//背景颜色及形状。
FrameLayout.LayoutParams params =
new FrameLayout.LayoutParams(snackBarView.getLayoutParams().width,
snackBarView.getLayoutParams().height);
//限制单排10个字。
if (str.length() > 4 && str.length() <= 10) {
params.width = (int) dipToPx(view.getContext(), (float) str.length() * 22);
} else if (str.length() <= 4) {
params.width = (int) dipToPx(view.getContext(), 5 * 22);
} else {
params.width = (int) dipToPx(view.getContext(), 10 * 22);
}
snackBarView.setLayoutParams(params);
params.gravity = Gravity.CENTER | Gravity.TOP;
//设置文字居中
TextView message = snackBarView.findViewById(com.google.android.material.R.id.snackbar_text);
message.setTextAlignment(View.TEXT_ALIGNMENT_GRAVITY);
message.setGravity(Gravity.CENTER);
message.setMaxLines(4);
snackbar.show();
//Toast.makeText(view.getContext(), str, Toast.LENGTH_SHORT).show();
}
//获取屏幕密度
private float getDeviceDensity(Context context) {
DisplayMetrics dm = context.getResources().getDisplayMetrics();
return dm.density;
}
//dp转px
private float dipToPx(Context context, float dip) {
return dip * getDeviceDensity(context) + 0.5f;
}
在shadow.xml里:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 阴影 -->
<item
android:bottom="0dp"
android:left="0dp"
android:right="0dp"
android:top="0dp">
<shape android:shape="rectangle">
<gradient
android:angle="270"
android:endColor="@color/grey2"
android:startColor="@color/grey"
android:type="linear" />
<corners
android:bottomLeftRadius="30dp"
android:bottomRightRadius="30dp"
android:topLeftRadius="30dp"
android:topRightRadius="30dp" />
</shape>
</item>
<item
android:bottom="5dp"
android:left="3dp"
android:right="3dp"
android:top="0dp">
<shape android:shape="rectangle">
<corners
android:bottomLeftRadius="30dp"
android:bottomRightRadius="30dp"
android:topLeftRadius="30dp"
android:topRightRadius="30dp" />
<gradient
android:angle="90"
android:endColor="#E5eff1e5"
android:startColor="#E5acda86"
android:type="linear"
android:useLevel="true" />
</shape>
</item>
</layer-list>
在需要弹窗的Activity里写:
ShowMsg showMsg = new ShowMsg();
View vi;//全局变量
vi = findViewById(android.R.id.content);//OnCreate里写
//然后,在需要弹窗的位置
showMsg.SM(vi, "我是中国人,我爱中华人民共和国!");