當前位置:首頁 » 安卓系統 » android吐司

android吐司

發布時間: 2022-04-20 11:48:11

㈠ android 廣播可以彈吐司嗎

package com.itheima.mobileguard.utils;

import android.app.Activity;
import android.widget.Toast;

public class UIUtils {
public static void showToast(final Activity context,final String msg){
if("main".equals(Thread.currentThread().getName())){
Toast.makeText(context, msg, 1).show();
}else{
context.runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(context, msg, 1).show();
}
});
}
}

㈡ android 的吐司怎麼不消失

有兩個原因導致不消失:

  1. 不停循環彈出,上一個還沒有關閉新的就彈出來了

  2. 主線程卡死

如果想要Toast一直顯示不消失,需要自定義偽Toast,比如windowmanager,popupwindow

㈢ android中的toast,為什麼要傳入context上下文環境

Toast必須知道自己的父控制項是誰,慢慢你就會發現他的用處了,就好比handle,一開始也是不明白,搞個這個東西幹嘛?有線程就行了,何必傳來調去的,也是後來慢慢才發現其中的原因,總之,存在即合理,一定有他的好處。

㈣ android的toast怎麼自定義顯示時間長度

Android中Toast的顯示時間為特定時間且不可更改,但是有時候我們開發設計需要讓Toast顯示更長時間,或者自己完全控制Toast的顯示和關閉。通過查看Toast類的源碼,可以看出,這有點難為它了,Toast類本身並沒有提供相應方法。

但是通過源碼的查看,還是可以看出點眉頭。源碼分析思路在這里轉eoe里的一篇文章,思路較為清晰:

轉:

Toast信息提示框之所以在顯示一定時間後會自動關閉,是因為在系統中有一個Toast隊列。系統會依次從隊列中取(出隊列)一個Toast,並 顯示它。在顯示一段時間後,再關閉,然後再顯示下一個Toast信息提示框。

直到Toast隊列中所有Toast都顯示完為止。那麼有些時候需要這個Toas t信息提示框長時間顯示,直到需要關閉它時通過代碼來控制,而不是讓系統自動來關閉Toast信息提示框。

不過這個要求對於Toast本身來說有些過 分,因為Toast類並沒有提供這個功能。雖然如此,但方法總比問題多。通過一些特殊的處理還是可以實現這個功能的,而且並不復雜。

Toast信息提示框需要調用Toast.show方法來顯示。下面來看一下show方法的源代碼。

public void show() {

if (mNextView == null) {

throw new RuntimeException("setView must have been called");

}

INotificationManager service = getService();

String pkg = mContext.getPackageName();

TN tn = mTN;

try {

// 將當前Toast加入到Toast隊列

service.enqueueToast(pkg, tn, mDuration);

} catch (RemoteException e) {

// Empty

}

}
復制代碼

show方法的代碼並不復雜,可以很容易找到如下的代碼。

service.enqueueToast(pkg, tn, mDuration);
復制代碼

從上面的代碼可以很容易推斷出它的功能是將當前的Toast加入到系統的Toast隊列中。

看到這里,各位讀者應該想到。雖然show方法的表面功能是顯示Toast信息提示框,但其實際的功能是將Toast加入到隊列中,再由系統根據Toast隊列來顯示Toast信息提示框。那麼我們經過更進一步地思考,可以大膽地做出一個初步的方案。

既然系統的Toast隊列可以顯示Toast信息提示框,那麼我們為什麼不可以自己來顯示它呢?

這樣不是可以自己來控制Toast的信息提示框的顯示和關閉了嗎!當然,這就不能再調用show方法來顯示Toast信息提示框了(因為show方法會將Toast加入隊列,這樣我們就控制不了Toast了)。

既然初步方案已擬定,現在就來實施它。先在Toast類找一下還有沒有其他的show方法。

結果發現了一個TN類,該類是Toast的一個內嵌類。在TN類中有一個show方法。TN是ITransientNotification.Stub的子類。從ITransientNotification和TN類中的show方法初步推斷(因為Transient的中文意思是「短暫的」)系統是從Toast隊列中獲得了Toast對象後,利用TN對象的show方法顯示Toast,再利用TN.hide方法來關閉Toast。

首先聲明,這只是假設,我們還不知道這么做是否可行!當然,這也是科學研究的一般方法,先推斷或假設,然後再證明推斷或假設。

現在關鍵的一步是獲得TN對象。遺憾的是TN被聲明成private類型,外部無法訪問。不過別著急。在Toast類中有一個mTN變數。雖然不是public變數,但仍然可以通過反射技術訪問該變數。mTN變數會在創建Toast對象時初始化。

因此,只要獲得mTN變數,就獲得了TN對象。下面的代碼顯示了一個永遠不會自動關閉的Toast信息提示框。

// 先創建一個Toast對象Toast toast = Toast.makeText(this, "永不消失的Toast", Toast.LENGTH_SHORT);// 設置Toast信息提示框顯示的位置(在屏幕頂部水平居中顯示)toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);try{

// 從Toast對象中獲得mTN變數Field field = toast.getClass().getDeclaredField("mTN");

field.setAccessible(true);

Object obj = field.get(toast);

// TN對象中獲得了show方法

Method method = obj.getClass().getDeclaredMethod("show", null);

// 調用show方法來顯示Toast信息提示框

method.invoke(obj, null);

}

catch (Exception e)

{

}
復制代碼

上面的代碼中try{…}catch(…){…}語句中的代碼是關鍵。先利用事先創建好的Toast對象獲得了mTN變數。然後再利用反射技術獲得了TN對象的show方法。

關閉Toast和顯示Toast的方法類似,只是需要獲得hide方法,代碼如下:

try

{

// 需要將前面代碼中的obj變數變成類變數。這樣在多個地方就都可以訪問了

Method method = obj.getClass().getDeclaredMethod("hide", null);

method.invoke(obj, null);

}

catch (Exception e)

{

}
復制代碼

上面的代碼已經很完美地實現了通過代碼控制Toast信息提示框顯示和關閉的功能。

但如果想實現得更完美,可以在Android SDK源代碼中找一個叫ITransientNotification.aidl的文件(該文件是AIDL服務定義文件,將在後面詳細介紹),並在Android工程的src目錄中建一個android.app包,將這個文件放到這個包中。

然後ADT會自動在gen目錄中生成了一個android.app包,包中有一個ITransientNotification.java文件。由於Android SDK自帶的ItransientNotification介面屬於內部資源,外部程序無法訪問,因此,只能將從Toast對象中獲得的mTN變數轉換成剛才生成的ITransientNotification對象了。

這樣就不需要使反射技術獲得show和hide方法了。

經過改良的顯示和關閉Toast信息提示框的代碼如下:

ITransientNotification notification = (ITransientNotification) field.get(toast);

// 顯示Toast信息提示框

notification.show();

// 關閉Toast信息提示框

notification.hide();
復制代碼

最後整理代碼如下:

Java代碼

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import android.app.Activity;

import android.os.Bundle;

import android.view.Gravity;

import android.view.View;

import android.widget.Button;

import android.widget.Toast;

public class TestToastActivity extends Activity {

private Button showtoast,closetoast;

private Toast toast;

private Field field;

private Object obj;

private Method showMethod,hideMethod;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

//初始化按鈕組件

showtoast = (Button)this.findViewById(R.id.showtoast);

closetoast = (Button)this.findViewById(R.id.closetoast);

//設置組件監聽

showtoast.setOnClickListener(new MyOnClickListener());

closetoast.setOnClickListener(new MyOnClickListener());

//創建Toast對象

toast = Toast.makeText(this, "Toast自定義顯示時間測試", 1);

toast.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL, 0, 0);

//利用反射技術拿到mTN對象

reflectionTN();

}

class MyOnClickListener implements View.OnClickListener{

@Override

public void onClick(View v) {

switch (v.getId()) {

case R.id.showtoast:

try {

showMethod.invoke(obj, null);//調用TN對象的show()方法,顯示toast

} catch (Exception e) {

e.printStackTrace();

}

break;

case R.id.closetoast:

try {

hideMethod.invoke(obj, null);//調用TN對象的hide()方法,關閉toast

} catch (Exception e) {

e.printStackTrace();

}

break;

default:

break;

}

}

}

private void reflectionTN() {

try {

field = toast.getClass().getDeclaredField("mTN");

field.setAccessible(true);

obj = field.get(toast);

showMethod = obj.getClass().getDeclaredMethod("show", null);

hideMethod = obj.getClass().getDeclaredMethod("hide", null);

} catch (Exception e) {

e.printStackTrace();

}

}

}
復制代碼

㈤ Android Toast可以自定義,有沒有對Toast裡面的字體進行,加粗,改變大小,斜體。

可以在Toast里增加一個TextView然後對TextView做字體加粗,大小設置。
1.字體加粗
textView.setTypeface(Typeface.defaultFromStyle(Typeface.BOLD));//加粗
textView.getPaint().setFakeBoldText(true);//加粗

2.字體大小
textView.setTextSize(500);

3.字體斜體
SpannableString sp = new SpannableString( "斜體文本" ); //設置斜體
sp.setSpan( new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 0 , tmp.length() , Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
textView.setText(sp);

㈥ android里Toast是什麼意思

toast是Android系統中一種消息框類型

拓展資料

Android中的Toast是一種簡易的消息提示框。

當視圖顯示給用戶,在應用程序中顯示為浮動。和Dialog不一樣的是,它永遠不會獲得焦點,無法被點擊。用戶將可能是在中間鍵入別的東西。Toast類的思想就是盡可能不引人注意,同時還向用戶顯示信息,希望他們看到。而且Toast顯示的時間有限,Toast會根據用戶設置的顯示時間後自動消失。

㈦ 如何防止android Toast重復顯示

Toast也是一個容器,可以包含各種View,並承載著它們顯示。

使用場景:
1、需要提示用戶,但又不需要用戶點擊「確定」或者「取消」按鈕。
2、不影響現有Activity運行的簡單提示。
用法:
1、可以通過構造函數初始化:

1 //初始化Toast
2 Toast toast = new Toast(this);
3 //設置顯示時間,可以選擇Toast.LENGTH_LONG或者Toast.LENGTH_SHORT
4 toast.setDuration(Toast.LENGTH_LONG);
5 //承載一個TextView,用來顯示文字
6 TextView view = new TextView(this);
7 //設置TextView的值
8 view.setText("這是一個Toast提示");
9 //設置TextView的布局
10 view.setLayoutParams(new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,LinearLayout.LayoutParams.WRAP_CONTENT));
11 //Toast承載該
12 TextViewtoast.setView(view);
13 //顯示Toast
14 toast.show();

2、上述的方法過於復雜,一般只適用於構造特殊界面的Toast,如果只想單純的進行文字提示,可以用工廠方法,它會自動構建一個帶邊框和文字的Toast:
1 //利用工廠方法構造一個簡單的Toast,並鏈式結構的直接進行提示
2 Toast.makeText(this, "這是一個Toast提示", Toast.LENGTH_LONG).show();
總結:Toast可以說是最常用也是最簡單的Android控制項之一,其自動關閉的功能大大簡化了代碼量,不失為用戶提示的最佳選擇。

㈧ android開發中關於toast的使用

Toast現在也是可以全局調用啊

我這里封裝了一個toast

這個解決了toast調用多次,屏幕上一直彈出的問題

調用方式

MyToast.showToast(context,"提示",Toast.LENGTH_LONG);

那麼你可以寫個公共的Activity父類,讓所有的子類都繼承它

這樣你可以再封裝了下

public void showLongToast(String msg){

MyToast.showToast(this,msg,Toast.LENGTH_LONG);

}

public void showShortToast(String msg){

MyToast.showToast(this,msg,Toast.LENGTH_SHORT);

}

㈨ 為什麼安卓吐司不成功

沒有揉出手套膜.麵粉筋度不夠造成。
製作吐司失敗很可能是在做面團及發酵的時候出現問題。面團首先得加適量的水攪拌,揉至表面光滑,不粘手的狀態是最好的。想要面團做的好,可以加入黃油,控制溫度。其次是發酵的問題,發酵時間在一個小時左右,面團發酵至本身的兩倍大即可。最後,切成相應形狀,放入烤箱烘烤。
關於吐司失敗的各種原因,我能給出幾個答案。首先,做煎吐司失敗的話,有可能是油放少了,煎吐司一般放黃油,黃油融化後,中小火煎,大火煎也可能煎糊。其次,用吐司機做吐司時,時間的選擇很重要,時間過長會糊。最後,炸吐司之前,需要吐司先抹上黃油或澱粉液。

㈩ android toast問題

望採納

熱點內容
怎麼才能編譯本書 發布:2025-05-16 10:27:47 瀏覽:757
ssd伺服器電腦 發布:2025-05-16 10:26:25 瀏覽:827
水果忍者源碼 發布:2025-05-16 10:26:22 瀏覽:472
python中ord函數 發布:2025-05-16 10:14:25 瀏覽:340
電腦啟動後無法連接伺服器 發布:2025-05-16 10:06:39 瀏覽:984
jar包編譯過程 發布:2025-05-16 10:03:37 瀏覽:679
選舉源碼 發布:2025-05-16 09:58:59 瀏覽:749
超級訪問陳小春應采兒 發布:2025-05-16 09:43:29 瀏覽:479
緩存視頻合並工具最新版 發布:2025-05-16 09:35:03 瀏覽:195
花雨庭伺服器ip地址和埠 發布:2025-05-16 09:34:58 瀏覽:240