大家好,小编今天又和大家见面了,今天给大家带来高级组件Toast提示框的自定义,相信很多友友都感兴趣吧,废话不多说,直接上今天要开讲的代码运行成功界面。
如下:
相信大伙非常吃惊,Toast提示框能做到那么美观有个性,完全不像自身的提示框那样呆板,只有黑色背景,和文本,而我自定义的Toast控件就不同了,不但有文字和背景还有绚丽的图片呢。下面就由我默默为大家讲解其中的大道理
首先介绍一下,自定义Toast有两种方式,一种是代码方式,另一种是xml方式。
第一种:代码方式生成自定义Toast.
本篇就不详细介绍布局了,它主要是由两个按钮组成,大家们绝顶聪明,肯定没问题的。那行,我就开始进入正题了,我先把第一种方式用到的代码贴进来,再详解。
/**
* 代码生成自定义Toast
*/
public void byCode(View v) {
//创建Toast,context定义成员变量,并要初始化,这是很容易出错的地方
Toast toast = new Toast(context);
//创建线性布局
LinearLayout layout = new LinearLayout(context);
//设置布局的长宽
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
layout.setLayoutParams(params);
//设置布局背景图片
layout.setBackgroundResource(R.drawable.bg_yellow);
//设置布局控件对齐方式,这里是居中垂直
layout.setGravity(Gravity.CENTER_VERTICAL);
//创建图片控件
ImageView image = new ImageView(context);
image.setImageResource(R.drawable.emoji_080);
//创建文本控件
TextView text = new TextView(context);
text.setText("大便便");
//在布局中添加生成的控件
layout.addView(image);
layout.addView(text);
//在Toast嵌入线性布局
toast.setView(layout);
//提示框持续时间
toast.setDuration(5000);
//提示框位置
toast.setGravity(Gravity.BOTTOM, 50, 100);
//把Toast提示框展示出来,关键的地方,少了这个,出现不了效果
toast.show();
}
第二种:xml生成自定义Toast
1.创建一个xml文件
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/emoji_098" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是大叔" />
2.编写src下的java文件
/**
* 代码生成自定义Toast
*/
public void byXml(View v) {
Toast toast = new Toast(context);
//关联要展示界面的xml文件,用的是LayoutInflater.from(context).inflate(资源ID,父类《通常设为空》)
View inflateView = LayoutInflater.from(context).inflate(
R.layout.xml_main, null);
toast.setView(inflateView);
toast.setDuration(5000);
toast.setGravity(Gravity.LEFT, 50, 100);
toast.show();
}
如果你要换图片和文字可以采用以下代码:
Toast toast = new Toast(context);
View inflateView = LayoutInflater.from(context).inflate(
R.layout.xml_main, null);
//创建一个新的图片文本控件,关键点在于为什么要inflateVIew.findViewById,因为你创建新的控件是在Toast里面
//创建的,假如没有这个,直接findViewId的话,肯定找不到Toast要显示的控件,这样会出现报错
ImageView img=(ImageView) inflateView.findViewById(R.id.img);
img.setImageResource(R.drawable.emoji_100);
TextView text=(TextView) inflateView.findViewById(R.id.text);
text.setText("我是章鱼");
toast.setView(inflateView);
toast.setDuration(5000);
toast.setGravity(Gravity.LEFT, 50, 100);
toast.show();
今天就到这里,希望大家都有所感悟,学到一点点知识,小编就满意了,夜深了,该洗洗睡了,送上小编最喜欢的一句话,每天叫你起床的不是闹钟,而是梦想。
see you 明天见,晚安。