今天在手机上有看到类似于这个
已收藏这一栏,原本还以为是个toast,但是翻阅了一下源码结果发现toast并没有监听这个功能
那这个时候怎么办呢,对了,就是用dialog
//此dialog直接用来做收藏功能提示
public class ToastDetailDialog extends BaseDialog implements View.OnClickListener{
private LeaveMyDialogListener listener;
private TextView text_title;
private TextView text_content;
/** 监听器 */
public ToastDetailDialog(Context context) {
super(context);
}
/** 监听器 */
public ToastDetailDialog(Context context, LeaveMyDialogListener listener) {
super(context);
/**
* 记得判空,不然会报空指针
*/
if(listener ==null){
return;
}
this.listener = listener;
}
@Override
public void onClick(View v) {
if(listener == null){
return;
}
listener.onClick(v);
}
public interface LeaveMyDialogListener{
public void onClick(View view);
}
@Override
protected int getLayoutId() {
return R.layout.toast_custom_view;
}
@Override
protected void findViews() {
text_title = (TextView) findViewById(R.id.title);
text_content = (TextView) findViewById(R.id.content);
text_title.setText("已收藏");
text_content.setText(",点击查看");
text_content.setOnClickListener(this);
}
public void setListener(LeaveMyDialogListener listener){
this.listener = listener;
}
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/linear"
android:background="@drawable/rounded_edittext2"
android:gravity="center_horizontal"
android:orientation="horizontal"
android:padding="10dp">
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:layout_marginLeft="12dp"
android:textSize="16dp"
tools:text="asdsad" />
<ImageView
android:visibility="gone"
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:contentDescription="@string/app_name"
tools:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="10dp"
android:textSize="16dp"
android:textColor="#358ff0"
tools:text="aweqwewqewqe" />
</LinearLayout>
@drawable/rounded_edittext2:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#666666"></solid>
<corners android:radius="18dp" />
</shape>
就是这样,然后性质啵啵的写完了,点击验证了一下,发现不对,有问题
/**
* 原本是想说用toast来做这个事情,但是居然toast没有监听,所以就采用dialog来做
*/
dialog = new ToastDetailDialog(DetailContentActivity.this);
dialog.setListener(new ToastDetailDialog.LeaveMyDialogListener() {
@Override
public void onClick(View view) {
CollectionActivity.start(DetailContentActivity.this);
}
});
dialog.show();
运行居然是这样的
背景有个透明的东西,这不就让别人知道我们用的是dialog嘛,哈哈
这回怎么办呢,没关系,作为程序猿都会有办法
dialog.getWindow().setDimAmount(0f);对了就是这句话,我们再运行看看
好像可以了哦!!!但是会发现这时候dialog 如果不去点击他不会消失,这时候想给读者像toast一样的感觉,这时候怎么办呢
哈哈,就是用线程啦!我们让他延迟3秒
new Handler().postDelayed(new Runnable(){
//
// public void run() {
// //execute the task
// dialog.dismiss();
// }
//
// }, 3000);
//原本要使用以上线程但是会出现内存泄露
这时候就要用到弱引用啦
Constant.SWITCH_DETAILTIVITY 这个呢在Constant里面大家可以定义一个int类型就好了,哈哈就在下面这个啦
public final static int SWITCH_DETAILTIVITY = 1;
private DetailContentActivity.MyHandler mHandler = new DetailContentActivity.MyHandler(DetailContentActivity.this);
private class MyHandler extends Handler{
private final WeakReference<DetailContentActivity> weakReference;
public MyHandler(DetailContentActivity activity){
weakReference = new WeakReference<>(activity);
}
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what ==Constant.SWITCH_DETAILTIVITY){
if(weakReference.get()!=null){
dialog.dismiss();
}
}
}
}
详细代码在这里哦
/**
* 原本是想说用toast来做这个事情,但是居然toast没有监听,所以就采用dialog来做
*/
dialog = new ToastDetailDialog(DetailContentActivity.this);
dialog.getWindow().setDimAmount(0f);//设置dialog背景全透明
dialog.setListener(new ToastDetailDialog.LeaveMyDialogListener() {
@Override
public void onClick(View view) {
CollectionActivity.start(DetailContentActivity.this);
}
});
dialog.show();
mHandler.sendEmptyMessageDelayed(Constant.SWITCH_DETAILTIVITY,3000);