android自定义消息提示框

自定义消息提示框主要分为两部分

1、自定义消息提示框的布局

想要怎样的布局都可以自己定义,主要是根据 id 来控制每一个控件

创建 view_toast.xml 布局:

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:background="@drawable/radius_toast"
    android:orientation="horizontal">
    <ImageView
        android:id="@+id/image_toast"
        android:layout_width="20dp"
        android:layout_height="18sp"
        android:layout_marginTop="2dp"
        android:background="@mipmap/ic_launcher"/>
    <TextView
        android:id="@+id/text_toast"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="16dp"
        android:text="我是自定义消息框"/>
</LinearLayout>

LinearLayout 的 背景也是可以自定义的,我这里是这样的:

在 res/drawable 下面创建 radius_toast.xml ,内容如下: 

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <corners android:radius="15dp"/>
    <solid android:color="#CCCCCC"/>
    <padding
        android:left="10dp"
        android:top="10dp"
        android:right="10dp"
        android:bottom="10dp" />
</shape>

在 radius_toast.xml 里定义了圆角、背景色和内边距


2、自定义消息提示框的“adapter”

创建一个  类,用于适配自定义的布局

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.win.customview.R;

public class MyToast{
    private Toast toast;

    public MyToast(Context context,int image,String texts) {
        //加载布局
        LayoutInflater layoutInflater = LayoutInflater.from(context);
        View view = layoutInflater.inflate(R.layout.view_toast,null);

        //设置图片 (通过 view )
        ImageView imageView=(ImageView)view.findViewById(R.id.image_toast);
        imageView.setBackgroundResource(image);

        //设置文字 (通过 view )
        TextView textView = (TextView) view.findViewById(R.id.text_toast);
        textView.setText(texts);

        if (toast != null) {
            toast.cancel();
        }
        toast = new Toast(context);
        toast.setDuration(Toast.LENGTH_SHORT);
        toast.setView(view);                    //将布局放入 Toast
        toast.show();
    }
}

在这里可以看到,需要向 MyToast 

传入 Context(上下文)、int(图片 R.mipmap.ic_launcher)、以及String(弹出来的文字)

通过向view设置图片、文字 最终将布局放入 Toast 以达到自定义的效果

像我这里,只有一张图片和一段文字,就只设置图片和设置文字就行了,

如果有更多的图文,也是一样的通过id关联起来就好了!!!

提示:需要怎样的布局都可以自己定义,在这个自定义的适配器中利用id关联起来就行了


最后的调用

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import com.win.customview.R;

public class ToastActivity extends AppCompatActivity {

    private Button my_toast;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_toast);
        my_toast = (Button)findViewById(R.id.my_toast);
        my_toast.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //这里调用自定义的消息框
                MyToast myToast = new MyToast(ToastActivity.this,R.mipmap.ic_launcher,"12335");
            }
        });

    }
}

这调用的核心就一句

MyToast myToast = new MyToast(ToastActivity.this,R.mipmap.ic_launcher,"12335");
其中,Content就是 ToastActivity.this 它是上下文;
   int就是 R.mipmap.ic_launcher  它是将要弹出来的图片;
   String就是 "12335" 它是将要弹出来的文字
这里,点击Button,就会弹出如下

总结:自定义可以实现很多炫酷的效果,只是需要通过 id 绑定,以达到控制每一个控件的效果,布局都是可以自己定义的。


源码:https://github.com/iscopy/CustomView

在 toast 包里面

 
 
 
 
 
 




猜你喜欢

转载自blog.csdn.net/weixin_41454168/article/details/79530441