概述
学习第三章还是UI组件,是UI组件中的弹出组件,把它拎出来单独给大家讲解。首先,来学习Toast,在之前的学习中也用到了Toast,在屏幕的下方出现一个提示信息,在一秒钟或者两秒钟消失。现在就详细的讲解一下Toast的使用方法,Toast是一个消息提示组件;设置显示的位置,之前使用的是默认的位置,当然我们可以自定义设置在屏幕中的哪个位置显示;自定义显示内容,之前是显示了一个文本,这也是我们最为常用的,那假设我们显示一个图片加文本要如何做到,也是我们今天要讲的内容;最后是Toast的一个简单封装,这里的封装只是一个入门级的,希望在以后可以找到更适合自己的封装方法。
演示
1、先将基本框架写好,activity_main.xml使用的是线性布局管理器,先列出三个button组件,分别做默认、改变位置、带图片(自定义)的演示;HelloAndroidActivity.java中先声明,在findViewById找到相对应的Button,使用Switch循环语句,在做演示的时候就可以直接在switch中添加 activity_main.xml:
android:orientation="vertical"
<Button
android:id="@+id/btn_toast_1"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="默认"/>
<Button
android:id="@+id/btn_toast_2"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="改变位置"/>
<Button
android:id="@+id/btn_toast_3"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="带图片(自定义)"/>
HelloAndroidActivity.java:
private Button mbtnToast1;
private Button mbtnToast2;
private Button mbtnToast3;
mbtnToast1 =(Button) findViewById(R.id.btn_toast_1);
mbtnToast2 =(Button) findViewById(R.id.btn_toast_2);
mbtnToast3 =(Button) findViewById(R.id.btn_toast_3);
OnClick OnClick = new OnClick();
mbtnToast1.setOnClickListener(OnClick);
mbtnToast2.setOnClickListener(OnClick);
mbtnToast3.setOnClickListener(OnClick);
class OnClick implements View.OnClickListener{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch(v.getId())
{
case R.id.btn_toast_1:
break;
case R.id.btn_toast_2:
break;
case R.id.btn_toast_3:
break;
}
}
}
2、默认Toast
Toast.makeText(getApplicationContext(), "默认", Toast.LENGTH_LONG).show();
3、Toast显示的位置居中,makeText的返回值是Toast,定义一个toastCenter,给toastCenter设置setGravity,最后调用show方法 HelloAndroidActivity.java:
Toast toastCenter = Toast.makeText(getApplicationContext(), "Toast居中", Toast.LENGTH_LONG);
toastCenter.setGravity(Gravity.CENTER, 0 ,0);
toastCenter.show();
4、自定义效果带图片, 先将准备好的图片上传到drawable-xxhdpi,创建一个activity_toast.xml自定义效果,分为两部分,图片和文字;在HelloAndroidActivity.java中先定义一个Toast,创建视图,视图通过LayoutInflater,view中有ImageView和TextView,分别找到并设置图片和文字 activity_toast.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
android:background="#99000000" //黑色带透明度的,后六位是颜色,前两位是透明度
android:gravity="center" //居中显示>
<ImageView
android:id="@+id/iv_toast"
android:layout_height="100dp"
android:layout_width="100dp"
android:scaleType="fitCenter"/>
<TextView
android:id="@+id/tv_toast"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="18sp"
android:textColor="#FFFFFF"
android:layout_marginTop="10dp"/>
</LinearLayout>
HelloAndroidActivity.java:
Toast toastCustom = new Toast(getApplicationContext());
LayoutInflater inflater = LayoutInflater.from(HelloAndroidActivity.this);
View view = inflater.inflate(R.layout.activity_toast,null);
ImageView imageView = (ImageView)view.findViewById(R.id.iv_toast);
TextView textView = (TextView)view.findViewById(R.id.tv_toast);
imageView.setImageResource(R.drawable.src);
textView.setText("自定义Toast");
toastCustom.setView(view);
toastCustom.show();
5、如果连续按同一个按钮,Toast显示是连续的排队状态,等第一个显示完了,第二个才开始显示,在实际开发中是需要后一个将前面的抵消掉,不管点多少下,都以最后一下为准,而不是一直在等,那如何来做呐? 首先封装一个简单的类,创建一个until包,在包下创建ToastUntil.java,在添加一个Button组件,运行之后,连续点十几次按钮不会等20几秒的 ToastUntil.java:
package com.kinginsai.template.android.until;
import android.content.Context;
import android.widget.Toast;
public class ToastUntil{
public static Toast mToast;
public static void showMsg(Context context,String msg){
if(mToast == null){
mToast = Toast.makeText(context,msg,Toast.LENGTH_LONG);
}else{
mToast.setText(msg);
}
mToast.show();
}
}
activity_main.xml:
<Button
android:id="@+id/btn_toast_4"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="ToastUntil"/>
HelloAndroidActivity.java:
private Button mbtnToast4;
mbtnToast4 =(Button) findViewById(R.id.btn_toast_4);
mbtnToast4.setOnClickListener(OnClick);
case R.id.btn_toast_4:
ToastUntil.showMsg(getApplicationContext(), "包装过的Toast");
break;