国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android 5.0以上Toast不顯示的解決方法

2019-12-12 04:41:04
字體:
供稿:網(wǎng)友

原因分析

用戶使用android 5.0以上的系統(tǒng)在安裝APP時,將消息通知的權(quán)限關(guān)閉掉了。實際上用戶本意只是想關(guān)閉Notification,但是Toast的show方法中有調(diào)用INotificationManager這個類,而這個類在用戶關(guān)閉消息通知權(quán)限的同時被禁用了,所以我們的吐司無法顯示。

Toast.show()

效果圖

自定義Toast(上)與Toast(下)比對

問題解決

既然系統(tǒng)不允許我們調(diào)用Toast,那么我們就自立門戶――自己寫一個Toast出來。我們總體的思路是:在Activity的布局中添加View實現(xiàn)Toast的效果。

Toast背景shape定義

我們知道shape的背景是一個半透明黑色的圓角效果:


Toast

因此我們使用的是shape的corners和solid結(jié)點:

<?xml version="1.0" encoding="utf-8"?><shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="#99000000" /> <corners android:radius="8dp" /></shape>

定義布局

布局中我們主要使用TextView控件,設(shè)置相應(yīng)的邊距和背景即可,布局代碼如下:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mbContainer" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginBottom="200dp" android:gravity="bottom|center" android:orientation="vertical" android:paddingLeft="50dp" android:paddingRight="50dp"> <LinearLayout android:id="@+id/toast_linear"  android:layout_width="wrap_content"  android:layout_height="wrap_content"  android:background="@drawable/shape_toastutils_bg"  android:gravity="bottom|center"  android:orientation="vertical"  android:padding="8dp">  <TextView android:id="@+id/mbMessage"   android:layout_width="match_parent"   android:layout_height="wrap_content"   android:layout_gravity="center_vertical"   android:layout_margin="5dp"   android:layout_weight="1"   android:gravity="center"   android:shadowColor="#BB000000"   android:shadowRadius="2.75"   android:textSize="12sp"   android:textColor="#FFFFFFFF" /> </LinearLayout></LinearLayout>

java代碼邏輯

自定義Toast的java代碼邏輯主要模仿系統(tǒng)Toast的makeText() show()兩個方法,此外還需要reset()方法,實現(xiàn)Toast顯示過程中Activity切換時context也隨之切換,關(guān)鍵代碼如下:

makeText(Context context, String message, int HIDE_DELAY)方法:

public static ToastUtils makeText(Context context, String message,        int HIDE_DELAY) { if (mInstance == null) {  mInstance = new ToastUtils(context); } else {  // 考慮Activity切換時,Toast依然顯示  if (!mContext.getClass().getName().endsWith(context.getClass().getName())) {   mInstance = new ToastUtils(context);  } } if (HIDE_DELAY == LENGTH_LONG) {  mInstance.HIDE_DELAY = 2500; } else {  mInstance.HIDE_DELAY = 1500; } mTextView.setText(message); return mInstance;}

makeText(Context context, int resId, int HIDE_DELAY)方法

public static ToastUtils makeText(Context context, int resId, int HIDE_DELAY) { String mes = ""; try {  mes = context.getResources().getString(resId); } catch (Resources.NotFoundException e) {  e.printStackTrace(); } return makeText(context, mes, HIDE_DELAY);}

show()方法

public void show() { if (isShow) {  // 若已經(jīng)顯示,則不再次顯示  return; } isShow = true; // 顯示動畫 mFadeInAnimation = new AlphaAnimation(0.0f, 1.0f); // 消失動畫 mFadeOutAnimation = new AlphaAnimation(1.0f, 0.0f); mFadeOutAnimation.setDuration(ANIMATION_DURATION); mFadeOutAnimation   .setAnimationListener(new Animation.AnimationListener() {    @Override    public void onAnimationStart(Animation animation) {     // 消失動畫后更改狀態(tài)為 未顯示     isShow = false;    }    @Override    public void onAnimationEnd(Animation animation) {     // 隱藏布局,不使用remove方法為防止多次創(chuàng)建多個布局     mContainer.setVisibility(View.GONE);    }    @Override    public void onAnimationRepeat(Animation animation) {    }   }); mContainer.setVisibility(View.VISIBLE); mFadeInAnimation.setDuration(ANIMATION_DURATION); mContainer.startAnimation(mFadeInAnimation); mHandler.postDelayed(mHideRunnable, HIDE_DELAY);}

方法調(diào)用

自定義Toast的使用與系統(tǒng)Toast類似,調(diào)用方法如下:

ToastUtils.makeText(context, "消息內(nèi)容",ToastUtils.LENGTH_SHORT).show();

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對各位Android開發(fā)者們能有所幫助,如果有疑問大家可以留言交流。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼图壁县| 罗城| 南召县| 永定县| 政和县| 巧家县| 深水埗区| 贵州省| 东阳市| 滨州市| 南乐县| 龙岩市| 敦煌市| 常宁市| 平邑县| 民权县| 舞钢市| 墨竹工卡县| 兰考县| 高平市| 连州市| 塔河县| 澄江县| 滦南县| 望城县| 嘉善县| 鄯善县| 上高县| 耒阳市| 昌邑市| 磐安县| 古浪县| 彰化县| 中江县| 克什克腾旗| 河津市| 会昌县| 女性| 济阳县| 团风县| 屯昌县|