设为首页 加入收藏

TOP

Android 用自定义PopupWindow实现自定义Toast(一)
2014-11-24 03:20:02 来源: 作者: 【 】 浏览:3
Tags:Android 定义 PopupWindow 实现 Toast

标题有点拗口,其实是可以分别写成两篇博文的。也就是说看完这篇能了解两个方面:


自定义布局样式的Toast


自定义PopupWindow实现多功能Toast



先感性认识:


--------------------------------------------------------------------------------


一 、自定义布局样式的Toast



布局文件dialog_toast.xml


< xml version="1.0" encoding="utf-8" >


http://schemas.android.com/apk/res/android"


android:layout_width="match_parent"


android:layout_height="match_parent" >



android:id="@+id/dialog_title"


android:textSize="@dimen/dialog_toast_title_text_size"


android:layout_width="@dimen/dialog_toast_width"


android:layout_height="wrap_content"


android:gravity="center_horizontal"


android:text="@string/toast_dialog_title"/>



android:id="@+id/dialog_content"


android:layout_width="@dimen/dialog_toast_width"


android:layout_height="wrap_content"


android:drawableLeft="@drawable/frog"


android:drawableRight="@drawable/fungus"


android:layout_below="@id/dialog_title"


android:text="@string/toast_dialog_content"/>




使用这个自定义布局,解决多次Toast重复弹出。


/**


* 显示自定义Toast


* private Toast mToast;


* View toastView = mLayoutInflater.inflate(R.layout.dialog_toast, null);


* @param toastView


*/


private void showToast(View toastView) {


toastView.setBackgroundColor(Color.TRANSPARENT);


if (mToast == null) {


mToast = new Toast(mContext);


mToast.setView(toastView);


mToast.setGravity(Gravity.BOTTOM|Gravity.CENTER, 0, 100);


mToast.setDuration(Toast.LENGTH_SHORT);


}


mToast.show();


}


--------------------------------------------------------------------------------


二 、自定义PopupWindow实现多功能Toast



以下是MenuItem点击事件的完整代码,详细注释了。


@Override


public void onClick(View v) {


/** MenuItem dismiss */


mPopWindow.dismiss();


/**


* 自定义PopupWindow模拟多功能Toast


*/


View popToastView = mLayoutInflater.inflate(


R.layout.dialog_toast, null);


mPopToast = new PopupWindow(popToastView,


LayoutParams.WRAP_CONTENT,


LayoutParams.WRAP_CONTENT, true);


mPopToast.setBackgroundDrawable(new ColorDrawable(


Color.TRANSPARENT));


mPopWindow.setOutsideTouchable(true);// 设置触摸外面时消失


mPopToast


.setAnimationStyle(android.R.style.Animation_Dialog);// 设置动画效果


mPopToast.showAtLocation(v,


Gravity.BOTTOM | Gravity.CENTER, 0, 300);


/**


* 用PopupWindow模拟Toast,里面的TextView的点击事件。


* 因为Toast不获取焦点,所以View的事件无法处理。


* 而PopupWindow解决了这个焦点问题。


*/


TextView dialogContent = (TextView) popToastView


.findViewById(R.id.dialog_content);


dialogContent.setOnClickListener(new OnClickListener() {


@Override


public void onClick(View v) {


if (mPopToast != null && mPopToast.isShowing()) {


mPopToast.dismiss();


/** 再次显示自定义Toast, 这次是从PopupWindow里面的TextView触发的 */


View toastViewAgain = mLayoutInflater.inflate(


R.layout.dialog_toast, null);


showToast(toastViewAgain);


}


}


});


/** 显示自定义Toast */


View toastView = mLayoutInflater.inflate(


R.layout.dialog_toast, null);


showToast(toastView);


}



使用PopupWindow实现的Toast可以不受Toast.LENGTH_SHORT或Toast.LENGTH_LONG的时间限制,并且可以得到焦点和用户交互,比如onClick等等。


--------------------------------------------------------------------------------


Toast本身是一个非常便捷的提示组件,它的特点就是使用便捷,比如


Toast.makeText(mContext, "123", Toast.LENGTH_SHORT).show();



这样的一句代码就可以给出用户一个很友好的提示。


如果想做出复杂的交互功能,这些就不是Toast的定位了,需要自定义Popup

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android 自定义Menu 下一篇Android中读取中文字符的文件与文..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)