Android之十一Toast 自定义Toast的实现方法,及其说明

Android Toast 自定义Toast的实现方法,及其说明

Android Toast用于在手机屏幕上向用户显示一条信息,一段时间后信息会自动消失。信息可以是简单的文本,也可以是复杂的图片及其他内容(显示一个view)。 


1.简单用法
Toast.makeText(midlet.getApplicationContext(), "用户名不能为空", Toast.LENGTH_LONG).show();
2.自定义显示位置效果
代码
toast = Toast.makeText(getApplicationContext(),
     "自定义位置Toast", Toast.LENGTH_LONG);
   toast.setGravity(Gravity.CENTER, 0, 0);
   toast.show(); 
3.带图片效果 
代码

 

<span style="font-size:14px;">toast=Toast.makeText(MainActivity.this, "你好"+name, Toast.LENGTH_LONG)	;
		toast.setGravity(Gravity.CENTER, 0, 0);
		   LinearLayout toastView = (LinearLayout) toast.getView();
		   toastView.setBackgroundColor(R.layout.toast_hud);
		   ImageView imageCodeProject = new ImageView(MainActivity.this);
		   imageCodeProject.setImageResource(R.drawable.pii);
		   toastView.addView(imageCodeProject, 0);
		   toast.show();</span>


三、常量
 
       int  LENGTH_LONG
 持续显示视图或文本提示较长时间。该时间长度可定制。      setDuration(int)
int  LENGTH_SHORT持续显示视图或文本提示较短时间。该时间长度可定制。该值为默认值。
四、构造函数
     public Toast (Context context) 构造一个空的 Toast 对象。在调用 show() 之前,必须先调用 setView(View)。
(译者注:只有使用setView(View)的时候,才使用new Toast(Content content)来得到Toast对象,否则必须用makeText()方法来创建toast对象,并且
这种方式获得Toast对象不能使用setText()方法。)
       参数 context    使用的上下文。通常是你的 Application 或 Activity 对象。 

五、公共方法
 
public int cancel()
     如果视图已经显示则将其关闭,还没有显示则不再显示。一般不需要调用该方法。正常情况下,视图会在超过存续期间后消失。
 
public int getDuration()返回存续期间  请参阅 setDuration(int)


public int getGravity() 取得提示信息在屏幕上显示的位置。请参阅Gravity setGravity()


public float getHorizontalMargin()返回横向栏外空白。


public float getVerticalMargin()返回纵向栏外空白。


public ViewgetView()返回 View 对象。请参阅setView(View)
 public int getXOffset()返回相对于参照位置的横向偏移像素量。
        Toast msg = Toast.makeText(Main.this, "Message", Toast.LENGTH_LONG);                   msg.setGravity(Gravity.CENTER, msg.getXOffset() / 2, msg.getYOffset() / 2);        

msg.show();
 
public int getYOffset()
返回相对于参照位置的纵向偏移像素量。
public static ToastmakeText(Context context, int resId, int duration)
生成一个从资源中取得的包含文本视图的标准 Toast 对象。
  参数context
使用的上下文。通常是你的Application或Activity对象。
resId
要使用的字符串资源ID,可以是已格式化文本。
duration
该信息的存续期间。值为LENGTH_SHORT或LENGTH_LON异常
当资源未找到时抛异常Resources.NotFoundException 

public static ToastmakeText(Context context, CharSequence text, int duration)
生成一个包含文本视图的标准 Toast 对象。

参数context
使用的上下文。通常是你的Application或Activity对象。
resId要显示的文本,可以是已格式化文本。
duration 该信息的存续期间。值为LENGTH_SHORT或LENGTH_LONG
   
public void setDuration(int duration)
设置存续期间。//注意:设置过大不起作用,duration的实际可用最大值为3500,即最多只能显示3.5s
    请参阅LENGTH_SHORT           LENGTH_LONG
 
public void setGravity(int gravity, int xOffset, int yOffset)
设置提示信息在屏幕上的显示位置。
(译者注:自定义Toast的显示位置,例如toast.setGravity(Gravity.CENTER_VERTICAL, 0, 0)可以把Toast定位在左上角。Toast提示的位置xOffset:大于0向右移,小于0向左移)
 请参阅Gravity   getGravity() 
public void setMargin(float horizontalMargin, float verticalMargin)
设置视图的栏外空白。
    参数horizontalMargin         容器的边缘与提示信息的横向空白(与容器宽度的比)。
           verticalMargin             容器的边缘与提示信息的纵向空白(与容器高度的比)。
public void setText(int resId)
更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。
    参数 resId      为 Toast 指定的新的字符串资源ID。
 public void setText(CharSequence s)
更新之前通过 makeText() 方法生成的 Toast 对象的文本内容。
    参数 s   为 Toast 指定的新的文本。
public void setView(View view)
设置要显示的 View 。
(译者注:注意这个方法可以显示自定义的toast视图,可以包含图像,文字等等。是比较常用的方法。)
   
 具体实现:
MainActivity.java

<span style="font-size:14px;">package com.example.sahello1;


import android.R.color;
import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Gravity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity {
     private TextView  btnClick;
     private EditText  etName;
    private  Toast toast=null;
	@SuppressLint("ResourceAsColor")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		btnClick= (TextView) findViewById(R.id.btnClick);
		etName=(EditText) findViewById(R.id.edName);
		
		btnClick.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
		String name=etName.getText().toString();
		/*toast=Toast.makeText(MainActivity.this, "你好"+name, Toast.LENGTH_LONG)
		;
		toast.setGravity(Gravity.CENTER, 0, 0);
		   LinearLayout toastView = (LinearLayout) toast.getView();
		   toastView.setBackgroundColor(R.layout.toast_hud);
		   ImageView imageCodeProject = new ImageView(MainActivity.this);
		   imageCodeProject.setImageResource(R.drawable.pii);
		   toastView.addView(imageCodeProject, 0);
		   toast.show();*/
		
		MyToast.myTosat(MainActivity.this, R.drawable.pii,
					 "显示图片"+name, 0);
		        //Toast1.midToast(MainActivity.this, "显示图片"+name, Toast.LENGTH_LONG);
			}
		});
	}

	
}</span>

MyToast.java
 

<span style="font-size:14px;">package com.example.sahello1;


import com.example.sahello1.R.drawable;

import android.R.color;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.view.Gravity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class MyToast {
    public static void myTosat(Context context , int imageId ,String content , int duration){
        //new一个toast传入要显示的activity的上下文
        Toast toast = new Toast(context);
        //显示的时间
        toast.setDuration(duration);
        //显示的位置
        toast.setGravity(Gravity.BOTTOM, 20, 500);
        //重新给toast进行布局
        LinearLayout toastLayout = new LinearLayout(context);
        toastLayout.setOrientation(LinearLayout.HORIZONTAL);
        toastLayout.setGravity(Gravity.CENTER_VERTICAL);
       
        toastLayout.layout(100, 100, 50,  20);	    
       
        
        ImageView imageView = new ImageView(context);
        imageView.setImageResource(imageId);
        //把imageView添加到toastLayout的布局当中
        toastLayout.addView(imageView);
       
        TextView textView = new TextView(context);
        textView.setText(content);
       textView.setBackgroundColor(Color.GRAY);
        
        Resources resources=context.getResources(); 
        Drawable drawable=resources.getDrawable(R.drawable.bg_to); 
        
        
       textView.setBackgroundDrawable(drawable);
        //把textView添加到toastLayout的布局当中
        toastLayout.addView(textView);
       // toastLayout.setBackgroundColor(Color.RED);
       
        //把toastLayout添加到toast的布局当中
        toast.setView(toastLayout);
        toast.show();
    }
}
</span>

UI布局

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:background="@drawable/picture" >

    <EditText
        android:id="@+id/edName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@android:drawable/edit_text"
        android:drawableLeft="@drawable/pii"
        android:drawablePadding="10dp"
        android:ems="10"
        android:text="请输入" >

        <requestFocus />
    </EditText>

    <TextView
        android:id="@+id/tvNamePrompt"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/edName"
        android:layout_centerHorizontal="true"
        android:text="@string/tvNamePrompt"
        android:textSize="20dp" />

    <TextView
        android:id="@+id/btnClick"
        android:layout_width="80dp"
        android:layout_height="40dp"
        android:layout_alignRight="@+id/tvNamePrompt"
        android:layout_below="@+id/edName"
        android:layout_marginTop="27dp"
        android:background="@drawable/login_btn_bg"
        android:gravity="center"
        android:paddingBottom="10dp"
        android:paddingTop="10dp"
        android:text="点  击"
        android:textColor="#FFFFFF"
        android:textSize="18sp" />

</RelativeLayout>

login_btn_bg.xml  按钮效果xml
 

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:drawable="@drawable/mc_btn_top_pressed" android:state_pressed="true"/>
    <!-- pressed -->
    <item android:drawable="@drawable/mc_btn_top_pressed" android:state_selected="true"/>
    <!-- focused -->
    <item android:drawable="@drawable/mc_btn_top_unpressed"/>
    <!-- default -->
    

</selector></span>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值