最近有同事反映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>
<?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();// 长时间
记得给个赞哦~