自定义真正带图片的Toast
来源:互联网 发布:java 去除全角符号 编辑:程序博客网 时间:2024/05/17 09:28
先上效果图:
再上代码:
public class ImageToast {/** * @author spare_H * @param msg 显示的内容 * @param resId 显示的图片资源的id * @param which 显示方式1.添加一个TextView和一个ImageView2.只添加一个TextView */public static void ShowToastwithImage(Context context, String msg,int resId, int which) {Toast toast = new Toast(context);TextView mTextView = new TextView(context);// 设置“背景布局”LinearLayout mLinearLayout = new LinearLayout(context);mLinearLayout.setBackgroundResource(R.drawable.toast_frame);//toast_frame就是系统的toast的背景图片if (which == 1) {mLinearLayout.setOrientation(LinearLayout.HORIZONTAL);ImageView mImageView = new ImageView(context);mImageView.setImageResource(resId);mLinearLayout.addView(mImageView);mTextView.setText("\n"+msg);//换行为了模拟文字居中} else if (which == 2) {mTextView.setText(msg);mTextView.setGravity(Gravity.CENTER_VERTICAL);//设置文字居中mTextView.setCompoundDrawablesWithIntrinsicBounds(resId, 0, 0, 0);}mLinearLayout.addView(mTextView);toast.setView(mLinearLayout);toast.setDuration(Toast.LENGTH_LONG);toast.show();}}
方式一有点糊弄人的感觉,文字居中效果是假的;方式二比较不错,一个Textview搞定。如果是在Service中调用的话,可以用Context mContext = (Context) getBaseContext();得到context。
系统Toast的布局文件如下(transient_notification.xml)
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/toast_layout_root" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/toast_frame"> <TextView android:id="@android:id/message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:textAppearance="@style/TextAppearance.Small" android:textColor="@color/bright_foreground_dark" android:shadowColor="#BB000000" android:shadowRadius="2.75" /></LinearLayout>看到这个,估计就都明白Toast的布局可以很容易自定义了。
关于控制Toast显示时间,网上一位兄弟给出了方法,就是使用Timer和TimerTask
,未能找到原始出处,代码如下:
private Toast toast = null;private class IntroButtonListener implements OnClickListener { @Override public void onClick(View v) { // TODO Auto-generated method stub toast = Toast.makeText(StartPage.this, toastText,Toast.LENGTH_LONG); initToast(); execToast(); }}private void execToast(){ Timer timer = new Timer(); timer.schedule(new TimerTask(){ @Override public void run() { // TODO Auto-generated method stub initToast(); } }, 30);}private void initToast(){ toast.show();}
文中解释如下:
在这里将Toast的示例化延迟到了触发事件是再响应,然后调用的是makeText()方法,给它设置Duration的值为Toast.LENGTH_LONG,然后将toast.show()用一个方法initToast()包起来,这么做的目的是让它显示在Timer中也会接着显示Toast。
这么做的逻辑是,首先先显示Toast,然后让Timer帮助再次显示Toast,这样就会出现了Toast长时间显示的效果,如果想让时间变得更长,可以修改Timer里面timer.schedule()的值,这里设置的是30。
- 自定义真正带图片的Toast
- Android基础:自定义带图片的Toast
- Android自定义Toast带图片的
- 带图片的Toast
- 自定义Toast(带图片的文字的)
- 自定义带声音的Toast
- 带图片的Toast效果
- Toast的其他用法(带图片的toast)
- Toast的高级自定义方式-循序渐进带你了解toast
- Android 带动画的自定义Toast
- 动态生成布局相关模板代码总结以及带图片的自定义Toast布局总结
- 带图片的Toast 与LinearLayout View
- 《学习记录》Toast带图片的显示
- 带图片的Toast提示信息框
- Toast带图片的消息提示
- 创建带图片的Toast提示
- Toast 带图片
- [android自定义控件]带有图片的Toast
- 性能测试中TPS的另外一种计算方法
- Allow regions of specific table to be load-balanced
- 线性表的顺序存储实现
- Database publishing wizard
- 深入HTML5: HTML5 本地存储( Local Storage )的前世今生
- 自定义真正带图片的Toast
- SQL*PLUS命令的使用大全
- ASP.net访问mysql数据库时发生Unable to convert MySQL date/time value to System.DateTime错误
- Android 简史
- 2011年上半年的一些总结
- Android 平台
- 技术人的流年
- h264 I帧、P帧和B帧的特点
- VMware Workstation 8 Beta Build 434829下载地址+试用密钥