Android自定义Toast之WindowManager
关于"Android自定义Toast之WindowManager",我可以为您提供详细的攻略。如下所示:
简介
在Android中,Toast是一种轻量级的通知形式,用于向用户显示一条文本信息。但是,自带的Toast有很多限制,比如不能自定义显示位置、样式等。因此,我们可以使用WindowManager来实现自定义Toast。
步骤
以下是实现自定义Toast的步骤:
1. 创建自定义布局文件
首先,我们需要创建一个自定义布局文件,来定义要显示的Toast的样式。例如,假设我们自定义了一个布局文件 custom_toast.xml
,其内容如下:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/custom_toast_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@drawable/toast_background">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_toast"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/toast_text_color"
android:textSize="16sp"
android:text="This is a custom Toast"/>
</LinearLayout>
在这个布局文件中,我们定义了一个包含图片和文本的LinearLayout,并且设置了LinearLayout的背景色和内边距。
2. 创建自定义Toast
接下来,我们需要创建一个自定义的Toast。我们可以通过继承PopupWindow类,并在其中添加自定义布局来实现自定义Toast。具体实现代码如下:
public class CustomToast extends PopupWindow {
private View mView;
public CustomToast(Context context) {
super(context);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mView = inflater.inflate(R.layout.custom_toast, null);
setContentView(mView);
setWidth(WindowManager.LayoutParams.WRAP_CONTENT);
setHeight(WindowManager.LayoutParams.WRAP_CONTENT);
setFocusable(false);
}
public void showMessage(View view, String message) {
TextView textView = mView.findViewById(R.id.custom_toast_message);
textView.setText(message);
showAsDropDown(view, 0, 0, Gravity.CENTER);
new Handler().postDelayed(this::dismiss, 2000);
}
}
在这个类中,我们通过LayoutInflater加载了自定义布局文件,然后设置了PopupWindow的宽度、高度和显示位置。最后,我们添加了一个 showMessage
方法,可以用来显示Toast,并设置Toast的文本内容。
3. 显示自定义Toast
当我们创建完自定义Toast后,就可以像使用系统Toast一样来显示它了。例如,在Activity中,我们可以这样来显示自定义Toast:
CustomToast customToast = new CustomToast(this);
customToast.showMessage(view, "This is a custom Toast");
其中,view
是一个要依附的View,用来确定Toast显示的位置。"This is a custom Toast"
是Toast显示的文本内容。
至此,我们已经完成了自定义Toast的实现。
示例说明
示例1:自定义显示位置
如果想要自定义Toast的显示位置,只需要在 showMessage
方法中修改参数即可。例如,如果想要将Toast显示在屏幕的正中心,可以这样来设置:
showAtLocation(view, Gravity.CENTER, 0, 0);
示例2:自定义样式
如果想要自定义Toast的样式,只需要修改自定义布局文件即可。例如,如果想要修改Toast的背景色,可以将 android:background="@drawable/toast_background"
修改为 android:background="@android:color/holo_blue_light"
。这样就可以将Toast的背景色改为蓝色。