问题:部份机型不显示toast

解决方案:

1、自己在设置里面去允许通知,但是显然客户会说别的app都可以,so

2、自定义解决。查看toast的源码发现其附着在window上

源码下载地址:https://github.com/AltasT/ToastSimple

原因:

某些机型需要去设置,某些机型阉割

源码:

package com.atlas.library.widget;import android.annotation.TargetApi;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.PixelFormat;
import android.os.Build;
import android.os.Handler;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.TextView;import com.atlas.library.R;/*** Created by atlas on 15/4/25.* Email:atlas.tufei@gmail.com*/
public class ToastUtils {private static final String TAG = ToastUtils.class.getSimpleName();private static TextView tv;public static final int LENGTH_LONG = 3500; // 3.5 secondspublic static final int LENGTH_SHORT = 2000; // 2 secondsprivate static View mNextView;private static int mGravity, mX, mY;private static final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();private static WindowManager mWM;private static Handler mHanlder = new Handler();/*** init* @param context*/@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)private static void init(Context context) {mY = context.getResources().getDimensionPixelSize(R.dimen.toast_y_offset);mGravity = context.getResources().getInteger(R.integer.config_toastDefaultGravity);LayoutInflater inflate = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);mNextView = inflate.inflate(R.layout.transient_notification, null);TextView tv = (TextView) mNextView.findViewById(android.R.id.message);mParams.height = WindowManager.LayoutParams.WRAP_CONTENT;mParams.width = WindowManager.LayoutParams.WRAP_CONTENT;mParams.format = PixelFormat.TRANSLUCENT;mParams.windowAnimations = R.style.Animation_Toast;mParams.type = WindowManager.LayoutParams.TYPE_TOAST;mParams.setTitle("Toast");mParams.flags = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;mWM = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);// We can resolve the Gravity here by using the Locale for getting// the layout directionfinal Configuration config = mNextView.getContext().getResources().getConfiguration();final int gravity = Gravity.getAbsoluteGravity(mGravity, config.getLayoutDirection());mParams.gravity = gravity;if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.FILL_HORIZONTAL) {mParams.horizontalWeight = 1.0f;}if ((gravity & Gravity.VERTICAL_GRAVITY_MASK) == Gravity.FILL_VERTICAL) {mParams.verticalWeight = 1.0f;}mParams.x = mX;mParams.y = mY;
//        mParams.verticalMargin = mVerticalMargin;
//        mParams.horizontalMargin = mHorizontalMargin;mParams.packageName = context.getPackageName();}/*** Show the view for the specified duration.* @param context* @param text* @param duration*/public static void show(final Context context, final CharSequence text, int duration) {if (context == null) {throw new RuntimeException("context is null");}if (mWM == null || mNextView == null) {init(context);}mHanlder.removeCallbacks(cancelRunable);mHanlder.post(new Runnable() {@Overridepublic void run() {((TextView) mNextView.findViewById(android.R.id.message)).setText(text);if (mNextView.getParent() != null)mWM.removeView(mNextView);mWM.addView(mNextView, mParams);}});mHanlder.postDelayed(cancelRunable, duration);}private static Runnable cancelRunable = new Runnable() {@Overridepublic void run() {cancel();}};/*** cancel toast*/public static void cancel() {if (mNextView != null && mNextView.getParent() != null)mWM.removeViewImmediate(mNextView);}
}

参考:http://www.th7.cn/Program/Android/201406/220638.shtml

解决部份机型toast不显示问题相关推荐

  1. 小小的Toast蕴含大道理(解决关闭通知时原生Toast不显示问题)

    目录 一.Toast成员变量 二. Toast显示流程 1. Toast makeText(@NonNull Context context, @Nullable Looper looper,@Non ...

  2. android toast 一直显示,android中toast无法显示问题

    本文记录两种情况下Android的toast无法显示的问题及提供对应的解决方案 关闭通知权限 在Android系统中将通知栏权限,我们可以发现toast无法展示出来(绝大部分机子,oppo和vivo一 ...

  3. ToastUtil【简单的Toast封装类】【未自定义Toast的显示风格】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 一个简单的Toast封装类. 效果图 API = 6.0 API = 4.4.2 代码分析 实现了不管我们触发多少次Toast调用, ...

  4. android toast 自定义时间,android自定义Toast设定显示时间

    开发android的同学可能会抱怨Toast设定显示的时长无效,只能是Toast.LENGTH_LONG 或者Toast.LENGTH_SHORT 之一,为了解决这些办法,有多种实现方式: 1.使用定 ...

  5. 微信小程序IOS机型时间格式显示NaN异常问题

    new Date()转换时间时,IOS机型时间格式显示NaN 错误原因: ios不支持时间为2020-05-29这种格式的日期,必须转换为2020/05/29这种格式才能使用new Date()进行转 ...

  6. android toast 自定义时间,Android Toast自定义显示时间

    Toast是Android中使用频率较高的弹窗提示手段,使用起来简单.方便.常规使用方法这里不做说明,继前一篇博客<Android中Toast全屏显示> ,其中抛砖引玉的给出一个简单的实现 ...

  7. 1分钟解决VS每次运行都显示“正在还原nuget程序包”问题

    1分钟解决VS每次运行都显示"正在还原nuget程序包"问题 参考文章: (1)1分钟解决VS每次运行都显示"正在还原nuget程序包"问题 (2)https: ...

  8. 解决iOS机型点击输入框不能聚焦的问题

    解决iOS机型点击输入框不能聚焦的问题 参考文章: (1)解决iOS机型点击输入框不能聚焦的问题 (2)https://www.cnblogs.com/blackbentel/p/11138017.h ...

  9. 解决django关于图片无法显示的问题

    解决django关于图片无法显示的问题 参考文章: (1)解决django关于图片无法显示的问题 (2)https://www.cnblogs.com/zhuifeng-mayi/articles/8 ...

最新文章

  1. Kettle使用_23 Excel表格输入ODS POI
  2. 面向对象程序设计第二次作业(2)
  3. ssl初一组周六模拟赛【2018.5.12】(期中)
  4. 3种语言白色汇汇通微盘程序源码
  5. 20171107校内模拟赛
  6. 力扣打家劫舍系列总结
  7. nacos注册中心demo
  8. solr 忽略大小写
  9. SVN移植、合库、分库
  10. 海康、大华设备搜索大概实现原理
  11. Activiti6快速入门指南
  12. SQL Server~T-SQL编程基础
  13. 华硕主板固态硬盘不识别_华硕主板固态硬盘识别不出来怎么办
  14. 基于ESXi虚拟服务器搭建
  15. python自动上传百度网盘_树莓派使用百度云盘自动上传存储监控照片
  16. Mac电脑优点是什么,缺点是什么?
  17. 蓝牙模块 HC08_两个STM32开发板无线通信
  18. http请求限制和http连接限制
  19. 小程序钉钉语音录入组件
  20. 千锋2018年最新php基础进阶加高级实战全套视频教程

热门文章

  1. 调节彩色图像亮度(基于不同的颜色空间)
  2. MAC ping IP 地址(ping通/ping不通)
  3. SSM公墓管理系统计算机毕设源码25188
  4. 【2018icpc Regional Dhaka G】Techland 题解
  5. 网页被http://runonce.msn.com/runonce3.aspx锁定
  6. 分布式系统原理与应用复习
  7. 本科、硕士、博士的区别是什么?
  8. Lombok首字母小写,第二个字母大写造成的参数无法接收问题
  9. 忘记Jenkins登陆密码怎么办?学会这招就够了
  10. 修改mysql默认字符集为latin1_MySQL字符集设置及字符转换(latin1转utf8)