android 使用Dialog实现Toast效果,解决有的机型不显示Toast的问题(保证能用)

最近有同事反映app有的操作没提示信息toast,让我感到很困惑,明明Android原生的Toast怎么就不管作用了呢,代码debug看了,代码也走了,就是不显示,到设置里看了看通知管理-->权限,也都开着呢,我的天儿~~~惊讶

没办法,自己动手、丰衣足食。实现方式:使用Dialog实现Toast效果,一模一样的效果~

贴效果图:

废话不多说,贴代码:

package com.wz.imapp.view;

import android.app.Dialog;
import android.content.Context;
import android.content.res.Resources;
import android.os.Handler;
import android.widget.TextView;

import com.wanzhao.imapp.activity.R;

/**
 * Created by liweipeng on 2017/10/20.
 */

public class XToast {

    public static final int LENGTH_SHORT = 1500;
    public static final int LENGTH_LONG = 3000;

    private Context mContext;
    private Handler mHandler;
    private TextView mTextView;
    private int mDuration;
    private Dialog dialog;

    public XToast(Context context) {
        try {
            mContext = context;
            mHandler = new Handler();
            dialog = new Dialog(mContext, R.style.XToastDialogStyle);
            dialog.setContentView(R.layout.xtoast_layout);
            mTextView = (TextView) dialog.findViewById(R.id.mbMessage);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static XToast makeText(Context context, CharSequence message,
                                  int duration) {
        XToast toastUtils = new XToast(context);
        try {
            toastUtils.mDuration = duration;
            toastUtils.mTextView.setText(message);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return toastUtils;
    }

    public static XToast makeText(Context context, int resId, int duration) {
        String mes = "";
        try {
            mes = context.getResources().getString(resId);
        } catch (Resources.NotFoundException e) {
            e.printStackTrace();
        }
        return makeText(context, mes, duration);
    }


    public void show() {
        try {
            dialog.show();
            mHandler.postDelayed(new Runnable() {
                @Override
                public void run() {
                    dialog.dismiss();
                }
            }, mDuration);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

引用资源:layout:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:paddingLeft="50dp"
    android:layout_marginBottom="@dimen/dimen_100_dp"
    android:paddingRight="50dp">

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/xtoast_shape_bg"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:orientation="vertical"
        android:padding="8dp">

        <TextView
            android:id="@+id/mbMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:gravity="center"
            android:shadowColor="#BB000000"
            android:shadowRadius="2.75"
            android:text=""
            android:textColor="#FFFFFFFF"
            android:textSize="12sp" />
    </LinearLayout>
</RelativeLayout>


drawable:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="#99000000" />
    <corners android:radius="8dp" />
</shape>

styles:

<style name="XToastDialogStyle"  parent="android:Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@android:color/transparent</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:backgroundDimEnabled">false</item>
    </style>


使用方法:例如:

XToast.makeText(MainActivity.this, “哈哈哈”, XToast.LENGTH_SHORT).show();//短时间

XToast.makeText(MainActivity.this, “哈哈哈”, XToast.LENGTH_LONG).show();// 长时间


记得给个赞哦~




评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值