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的背景色改为蓝色。

营销型网站