當前位置:首頁 » 編程語言 » javatoast

javatoast

發布時間: 2023-04-01 03:27:22

java 怎麼獲得文字的坐標

如果解決了問題請將此答案設置為採納,關注,如果有疑問請留言。
建議:
以後如果你在探尋一個對象里出現類似undefine的情況,很明顯這是a.x不存在,如果是a不存在,那你代碼就掛掉了
解決方法皮乎:將對象列印大宏出來,看看內部的屬性有哪些滾握冊,怎麼獲取,大家可能會說列印一個對象不能直接看到內容而是類似[Object.....]的東東,我們可以將object轉化成JSON啊,然後列印查看對象內容。根據列印內容,確定如何獲取坐標
總結:以上的問題,其實就是我們對數據對象內部結構不了解,要麼查資料,要麼直接自己探究(將對象內容全部列印)。

㈡ java:import android.widget.Toast; 這個是什麽包啊有什麽用啊急急急,請高手指點,謝啦!

這是Android SDK中android.jar中的一個類. 作用缺蘆或是嘩雀在界面上彈出伏伍一個懸浮提示框, 一段時間之後會自動消失.

㈢ Toast 提示報空指針是什麼原因

原因:
之所以報空指針異常的原因是Button findViewById的時候指向了另一個界面的Button,當前界面的Button並沒有被初始化,所以報了殲李空指針異常。
衫塌解決方法:
只要把這兩或改圓個界面的Button設置為不相同的即可(或者給相應xml界面中的Button設置好Id)。

㈣ 第三方工具隱藏Toast彈出

1.集成環信實現聊天室功能時,每當有用戶進入和離開聊天室總會彈出Toast,怎麼隱藏掉呢?
在環信的Demo包里,找到xxxHXSDKHelper.java文件,在裡面把監聽回調的Toast注釋掉即可。
或者使用Find in Path-》輸入member,姿局找到環信下的所有Toast,注釋掉。

2.在使用友盟進行社會化分享時,總會彈出「開始分享...」、「分享中...」、「分享成功...」這樣的Toast,如果要注釋掉,可以在跡好讓加mController.getConfig().closeToast();

「微信提示:大於襪搜32k 壓縮圖片」時,加UMWXHandler.showCompressToast(false);即可。

㈤ 使用系統Toast的問題

記錄下在使用系統Toast存在的問題:

1. 當通知洞州亂許可權被關閉時華為等手機Toast不顯示;
2. Toast隊列機制上在不同手機上可能不同;
3. Toast的BadTokenException問題;

當發現系統Toast存在問題時,不少同學使用自定義納檔TYPE_TOAST彈框來實現相同效果.雖然情況下效果都是OK的,但TYPE_TOAST依然會存在問題:

4. Android8.0之後的token null is not valid問題(實測部分機型問題);
5. Android7.1之後,不允許同時展示兩個TYPE_TOAST彈窗(實測部分機型問題);

那麼解決方案是:

相信不少同學舊項目中封裝的ToastUtil都是直接使用的ApplicationContext作為上下文,然後在需要彈窗的時候直接就是ToastUtil.show(str),這樣的使用方式對於我們來說是最方便的啦。

當然,使用YToast你也依然可以沿用這種封裝方式,但這種方式在下面這個場景中可能會無法成功展示出彈窗(該場景下原生Toast也一樣無法彈出),不過請放心不會導致應用崩潰,而且這個場景出現的概率較小,有以下三個必要條件:

1.通知欄許可權被關閉(通知欄許可權默認都是打開的)
2.非MIUI手機
3.Android8.0以上的部分手機(我最近測試中的幾部8.0+設備都不存在該問題)。

不過,如果想要保證在所有場景下都能正常展示彈窗,還是建議在YToast.make(context)時傳入Activity作為上下文,這樣在該場景下YToast會啟用ActivityToast展示出彈窗。

接下來再詳細分析下上面提到的五個問題。

看下方Toast源碼中的show()方法,通過AIDL獲跡纖取到INotificationManager,並將接下來的顯示流程式控制制權交給NotificationManagerService。NMS中會對Toast進行許可權校驗,當通知許可權校驗不通過時,Toast將不做展示。

當然不同ROM中NMS可能會有不同,比如MIUI就對這部分內容進行了修改,所以小米手機關閉通知許可權不會導致Toast不顯示。

如何解決這個問題?只要能夠繞過NotificationManagerService即可。

YToast通過使用TYPE_TOAST實現全局彈窗功能,不使用系統Toast,也沒有使用NMS服務,因此不受通知許可權限制。

我找了四台設備,創建兩個Gravity不同的Toast並調用show()方法,結果出現了四種展示效果:

造成這個問題的原因應該是各大廠商ROM中NMS維護Toast隊列的邏輯有差異。
同樣的,YToast內部也維護著自己的隊列邏輯,保證在所有手機上使用DToast的效果相同。

YToast中多個彈窗連續出現時:

相同優先順序時,會終止上一個,直接展示後一個;
不同優先順序時,如果後一個的優先順序更高則會終止上一個,直接展示後一個。

什麼情況下windowToken會失效?

UI線程發生阻塞,導致TN.show()沒有及時執行,當NotificationManager的檢測超時後便會刪除WMS中的該token,即造成token失效。

如何解決?

因此對於8.0之前的我們也需要做相同的處理。YToast是通過反射完成這個動作,具體看下方實現:

Android8.0後對WindowManager做了限制和修改,特別是TYPE_TOAST類型的窗口,必須要傳遞一個token用於校驗。
API25:(PhoneWindowManager.java源碼)

API26:(PhoneWindowManager.java源碼)

為了解決問題一,DovaToast不得不選擇繞過NotificationManagerService的控制,但由於windowToken是NMS生成的,繞過NMS就無法獲取到有效的windowToken,於是作為TYPE_TOAST的DovaToast就可能陷入第四個問題。

因此,DToast選擇在DovaToast出現該問題時引入ActivityToast,在DovaToast無法正常展示時創建一個依附於Activity的彈窗展示出來,不過ActivityToast只會展示在當前Activity,不具有跨頁面功能。

如果說有更好的方案,那肯定是去獲取懸浮窗許可權然後改用TYPE_PHONE等類型,但懸浮窗許可權往往不容易獲取,目前來看恐怕除了微信其他APP都不能保證拿得到用戶的懸浮窗許可權。

YToast的彈窗策略就是同一時間最多隻展示一個彈窗,邏輯上就避免了此問題。因此僅捕獲該異常。

其他建議

如果能夠接受Toast不跨界面的話,建議使用SnackBar

㈥ 怎麼實現toast中的hide方法

在android中toast是一個很好用的控制項,可以很方便的通知用戶現在手機在做什麼或是你已經做了什麼或是在做什麼就會怎麼樣......。

最近無事總結一下其使用方法。 我們一般的使用方法如下:

[java] view plain print?
Toast.makeText(this, "測試", Toast.LENGTH_SHORT).show()

這也是最簡單的使用方法,其實Toast還有一些比較高級的使用方法

1、設置Toast在屏幕中的顯示的位置

ToastAPI中有一個setGravity(int gravity, int xOffset, int yOffset)方法此方法可以完成對Toast顯示位置的控制

第一個參數gravity可以使用Gravity類中提供的一些參數例如Gravity.TOP 、Gravity.LEFT、Gravity.RIGHT、Gravity.CENTER_HORIZONTAL.......

xOffset、yOffset 參數主要和Gracity實現的功能一樣但是要比Gravity要強大。Gravity可以定義在屏擾改幕的頂部、中間或是下部。

xOffset、yOffset 可以定義到屏幕的具體的位置,如果你不想他在設置中起作用都設置為0就可以了。在設置完Gravity的屬性後 xOffset 負責水平位置的定位,

負值表示顯示偏左,正緩畢判值顯示偏右。yOffset 負值表示偏上 正值表示偏下。
例如

[java] view plain print?
Toast toast = Toast.makeText(this, "test", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();

2、自定義Toast的布局數困,如果你不喜歡android系統自己帶的Toast布局你完全可以自己定義一個顯示的方式哦

ToastAPI中有一個setView(View view)方法

[java] view plain print?
Context context = getApplicationContext();
String msg = "test";
int ration = Toast.LENGTH_LONG;
Toast toast = Toast.makeText(context, msg, ration);
toast.setGravity(Gravity.TOP, 0, 0);

LinearLayout ll = new LinearLayout(context);
ll.setOrientation(LinearLayout.VERTICAL);

Button button = new Button(context);

button.setText(msg);

int lHeight = LinearLayout.LayoutParams.FILL_PARENT;
int lWidth = LinearLayout.LayoutParams.WRAP_CONTENT;
ll.addView( button , new LinearLayout.LayoutParams(lHeight, lWidth));

ll.setPadding(40, 50, 0, 50);

toast.setView(ll);
toast.show();

這樣就把button顯示成了一個Toast,我是為了演示你可以自定義一個View

去顯示你自己想顯示的Toast

3、自定義顯示Toast的顯示時間 Toast的顯示時間ToastAPI沒有給出一個介面或是方法去設置和調用,

哪我們怎麼去設置呢。通過查看Toast的源代碼你可以發現一些東西下面是 Toast中show()方法的源代碼

[java] view plain print?
/**
* Show the view for the specified ration.
*/
public void show() {
if (mNextView == null) {
throw new RuntimeException("setView must have been called");
}

INotificationManager service = getService();
String pkg = mContext.getPackageName();
TN tn = mTN;
tn.mNextView = mNextView;

try {
service.enqueueToast(pkg, tn, mDuration);
} catch (RemoteException e) {
// Empty
}
}

從中我們可以看到他把tn添加到了service的Toast處理隊列中。哪我們是肯定是改不了的了 INotificationManager 是一個介面

[java] view plain print?
interface INotificationManager
{
void enqueueNotification(String pkg, int id, in Notification notification, inout int[] idReceived);
void cancelNotification(String pkg, int id);
void cancelAllNotifications(String pkg);

void enqueueToast(String pkg, ITransientNotification callback, int ration);
void cancelToast(String pkg, ITransientNotification callback);
}

它的實現類是 NotificationManagerService 通過查看這個類可以看出一點端倪

[java] view plain print?
public void enqueueToast(String pkg, ITransientNotification callback, int ration)
{
if (DBG) Slog.i(TAG, "enqueueToast pkg=" + pkg + " callback=" + callback + " ration=" + ration);

if (pkg == null || callback == null) {
Slog.e(TAG, "Not doing toast. pkg=" + pkg + " callback=" + callback);
return ;
}

final boolean isSystemToast = ("android".equals(pkg));

if (ENABLE_BLOCKED_TOASTS && !isSystemToast && !(pkg)) {
Slog.e(TAG, "Suppressing toast from package " + pkg + " by user request.");
return;
}

synchronized (mToastQueue) {
int callingPid = Binder.getCallingPid();
long callingId = Binder.clearCallingIdentity();
try {
ToastRecord record;
int index = indexOfToastLocked(pkg, callback);
// If it's already in the queue, we update it in place, we don't
// move it to the end of the queue.
if (index >= 0) {
record = mToastQueue.get(index);
record.update(ration);
} else {
// Limit the number of toasts that any given package except the android
// package can enqueue. Prevents DOS attacks and deals with leaks.
if (!isSystemToast) {
int count = 0;
final int N = mToastQueue.size();
for (int i=0; i<N; i++) {
final ToastRecord r = mToastQueue.get(i);
if (r.pkg.equals(pkg)) {
count++;
if (count >= MAX_PACKAGE_NOTIFICATIONS) {
Slog.e(TAG, "Package has already posted " + count
+ " toasts. Not showing more. Package=" + pkg);
return;
}
}
}
}

record = new ToastRecord(callingPid, pkg, callback, ration);
mToastQueue.add(record);
index = mToastQueue.size() - 1;
keepProcessAliveLocked(callingPid);
}
// If it's at index 0, it's the current toast. It doesn't matter if it's
// new or just been updated. Call back and tell it to show itself.
// If the callback fails, this will remove it from the list, so don't
// assume that it's valid after this.
if (index == 0) {
showNextToastLocked();
}
} finally {
Binder.restoreCallingIdentity(callingId);
}
}
}

有點看不懂了。。。。。。。 其中的內嵌在Toast中的TN類可能實現了toast的顯示 他其中有一些方法

[java] view plain print?
/**
* schele handleShow into the right thread
*/
public void show() {
if (localLOGV) Log.v(TAG, "SHOW: " + this);
mHandler.post(mShow);
}

/**
* schele handleHide into the right thread
*/
public void hide() {
if (localLOGV) Log.v(TAG, "HIDE: " + this);
mHandler.post(mHide);
}

可能控制Toast的顯示我們可以試試
由於TN類是private的所以我們只能使用反射機制來做了
我們不能獲得但是Toast類中有這個對象我們可以使用

[java] view plain print?
Field field = toast.getClass().getDeclaredField("mTN");
field.setAccessible(true);
Object obj = field.get(toast);
Method method = obj.getClass().getDeclaredMethod("show", null);
method1=obj.getClass().getDeclaredMethod("hide", null);
method.invoke(obj, null);

這樣就使Toast一直顯示了
要清除Toast的話只需要反射獲得hide方法然後執行就可以了

㈦ Android 的Thread編程,我在Thread的run()方法中用Toast輸出信息時出錯!

不能在子線程中更新UI,這是我之前寫的一個例子,你看看,使用Handler消息機制

public class HandlerDemoActivity extends Activity implements OnClickListener {
Button btn1,btn2;
ProgressBar progressBar;
UpdateDataHandler updateDataHandler;
HandlerThread handlerThread;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btn1 = (Button)findViewById(R.id.btn1);
btn2 = (Button)findViewById(R.id.btn2);
progressBar = (ProgressBar)findViewById(R.id.progressBar1);
btn1.setOnClickListener(this);
btn2.setOnClickListener(this);

}
/**
* 自定義一個類來繼承Handler類,並重寫handleMessage函數,
* 並且需要一個帶有Looper對象的構造函數
* 循環檢測是否有消息,如果有消息,將調用handleMessage取出數據,
* 如果沒有消息,進入等待狀態
* @author Administrator
*
*/
class UpdateDataHandler extends Handler{

public UpdateDataHandler(Looper looper){
super(looper);
}

@Override
public void handleMessage(Message msg) {

super.handleMessage(msg);

System.out.println("----------" + Thread.currentThread().getId());
progressBar.setProgress(msg.arg1); //從消息隊列中取出數據,並更新控制項
updateDataHandler.post(printRunnable);
}
}

Runnable printRunnable = new Runnable() {//實現一個線程類
int i = 0;
@Override
public void run() { //重寫線程類中的run函數
i += 20;
Message msg = updateDataHandler.obtainMessage(); //獲得handler的message對象
msg.arg1=i; //向message對象中放置數據
//msg.obj = obj;//還可以發送一些對象
//msg.setData();//可以發送Bundle對象
try {
Thread.sleep(1000); //暫停1秒鍾
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(i);
if(i > 100) //判斷當變數到達100時,操作結束
{
updateDataHandler.removeCallbacks(printRunnable);//從handler中釋放線程類
return;
}
//msg.sendToTarget(); //使用此函數也可以實現發送消息
updateDataHandler.sendMessage(msg); //將message對象放到消息隊列中
}
};

@Override
public void onClick(View v) {
if(v == btn1)
{
handlerThread = new HandlerThread("");// HandlerThread是一個Thread,繼承自Thread。它保留著對Looper實例的引用
handlerThread.start(); //一定要調用線程的start函數
updateDataHandler = new UpdateDataHandler(handlerThread.getLooper());
updateDataHandler.post(printRunnable);
System.out.println("主線程" + Thread.currentThread().getId());

}
}
}

㈧ android的runnable里可以寫toast么

Android中提供一種簡單的Toast消息提示框機制,可以在用戶點擊了某些按鈕後,提示用戶一些信息,提示的信息不能被用戶點擊,Toast的提示信息根據用戶設置的顯示時間後自動消失。Toast的提示信息可以在調試程序的時候方便的顯示某些想顯示的東西。 兩種方法創建Toast 第一種方法的Java代碼: makeText(Context context, int resId, int ration) 參數:context是toast顯示在哪個上下文,通常是當前Activity;resId指顯示內容引用Resouce那條數據,就是從R類中去指定顯示的消息內容;ration指定顯示時間,Toast默認有LENGTH_SHORT和LENGTH_LONG兩常量,分別表示短時間顯示和長時間顯示。 第二種方法的Java代碼: makeText(Context context, CharSequence text, int ration) 參數context和ration與第一個方法相同,參數text可以自己寫消息內容。 用上面任意方法創建Toast對象之後調用方法show()即可顯示。 Java代碼: Toast toast = Toast.makeText(ToastDemoActivity.this, "這是一個普通的Toast!", Toast.LENGTH_SHORT); toast.show();

㈨ Android 中如何在java類中調用activity 中的一個方法

通常,您不應該以這種方式創建新的 MainActivity 實例。要打開一個新的 MainActivity,請使用 Intent。在您的情況下,您應該引用原始 MainActivity 實例,並在那裡調用此方法。不要以任何方式創建新的,因為您已經在運行它。
一個簡單的解決方法:
MainActivity.this.myMethod("Hello there")
您不必存儲mContext. 你已經在 MainActivity 裡面了。
因此,完整的代碼將是:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView myWebView = findViewById(R.id.webview);
myWebView.loadUrl("http://www.google.com");
myWebView.addJavascriptInterface(new WebAppInterface(), "Android");
}
public void myMethod(String test){
Toast.makeText(this, test, Toast.LENGTH_SHORT).show();
}
public class WebAppInterface {
/** Show a toast from the web page */

@JavascriptInterface
public void showToast(String toast) {
MainActivity.this.myMethod("Hello there");
}
}
}
實際上,我認為您甚至可以避免使用MainActivity.this., 並myMethod直接調用。

㈩ 用kotlin語法怎麼寫java代碼中的吐司toast

kotlin中的寫派帶法搏和如下:
import mypackage.util.ContextExtensions.toast
fun myFun(context: Context) {
context.toast("Hello world!"基羨盯)
}

熱點內容
奧維地圖伺服器地址怎麼填 發布:2024-04-25 12:40:04 瀏覽:964
低配置游戲玩哪個平台 發布:2024-04-25 12:35:04 瀏覽:558
glinux下載 發布:2024-04-25 12:30:09 瀏覽:83
安卓手機可以用的谷歌叫什麼 發布:2024-04-25 12:05:57 瀏覽:942
linux改變用戶所屬組 發布:2024-04-25 11:50:33 瀏覽:469
rsa加密演算法java代碼 發布:2024-04-25 11:40:07 瀏覽:883
如何改變拉桿箱上的初始密碼 發布:2024-04-25 11:17:23 瀏覽:799
內網掛代理虛擬機如何配置網卡 發布:2024-04-25 11:15:06 瀏覽:687
明日之後緩存怎麼清理 發布:2024-04-25 11:14:56 瀏覽:205
華為mate30怎麼退回安卓版 發布:2024-04-25 11:08:49 瀏覽:898