標籤:
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")@Overrideprotected 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>
Android之十一Toast 自訂Toast的實現方法,及其說明