`

Toast 在android 4.0中问题解决方案

阅读更多

 

3月26日追加:

完全自己实现Toast效果,信息由windowManager直接绘在屏幕上 用Handler延时取消

和系统Toast已经无任何关联了。。。。

注意  必须获得当前Activity的context对象   ApplicationContext/Service不可使用

appwidget中不可使用

 

package xxxxx;

import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.os.Message;
import android.view.Gravity;
import android.view.WindowManager;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

importxxxxxx;

/**
*
* @author DK App内所有Toast均使用本类管理 每个触发的Toast都会显示 *
* 不存在延迟Toast现象
*/
public class ToastUtil {
static TextView tv;
static WindowManager mWindowManager;

public static void showMessage(final Context act, final String msg) {
showMessage(act, msg, Toast.LENGTH_SHORT);

}

public static void showMessage(final Context act, final int msg) {
showMessage(act, act.getString(msg), Toast.LENGTH_SHORT);

}

public static void showMessage(Context context, String msg, int Length) {

mWindowManager=(WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

if(tv==null)
{
tv = new TextView(context);

tv.setTextSize(24);
tv.setTextColor(0xff000000);
tv.setBackgroundResource(R.drawable.bg_appwidget_toast);
tv.setPadding(5, 5, 5, 5);
}
tv.setText(msg);

if (tv.getParent() == null) {
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.gravity = Gravity.BOTTOM;
params.alpha = 0.85f;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
| WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
| WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
params.format = PixelFormat.TRANSLUCENT;
params.verticalMargin=0.2f;
params.windowAnimations = 0;
mWindowManager.addView(tv, params);
handler.sendEmptyMessageDelayed(101, 2000);
} else {
handler.removeMessages(101);
handler.sendEmptyMessageDelayed(101, 2000);
}
}

static Handler handler = new Handler() {

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if (tv.getParent() != null)
mWindowManager.removeView(tv);
}

};

public static void cancelCurrentToast() {
if (tv != null && tv.getParent() != null) {
mWindowManager.removeView(tv);
}
}

}

分享到:
评论

相关推荐

    Android4.0开发学习之ImageButton

    在Android 4.0中,`ImageButton`还支持触摸反馈效果,可以通过设置`android:tint`属性或使用`android:foreground`属性来改变图像的颜色或者添加前景效果。同时,你可以利用`android:scaleType`调整图像在按钮中的...

    Android 5.0以上Toast不显示的解决方法

    最近在开发中我们经常会在适配5.0以后的机型遇到各种各样的问题,其中有一个不大不小的问题就是:Toast不显示问题,这篇文章就给大家总结了Android 5.0以上Toast不显示的原因与解决方法,有需要的朋友们可以参考借鉴...

    Axure组件库for Android 4.0

    在设计Android应用的原型时,了解Android 4.0的设计原则和规范至关重要。这个组件库包含了符合Android Material Design前身的设计元素,如行动召唤按钮、滑动抽屉、选项菜单、图标和其他界面组件,这些元素都是按照...

    android4.0客户端名片识别

    在Android 4.0(冰淇淋三明治)系统上,名片识别是一项实用的功能,它能够帮助用户快速地将纸质名片转换为数字联系人信息,并直接存入设备的通讯录。这个程序通过集成特定的图像处理和光学字符识别(OCR)技术,实现...

    Android-自定义Toast解决系统Toast存在的问题

    本文将深入探讨如何在Android中自定义Toast,并提供相应的代码示例。 首先,让我们了解系统Toast的基本用法。在Android SDK中,Toast类提供了show()方法来显示一个消息。通常,我们通过以下方式创建和显示一个系统...

    android自定义Toast设定显示时间

    Android 自定义 Toast 设定显示时间是指在 Android 应用程序中,自定义 Toast 的显示时间,而不是使用系统默认的 Toast.LENGTH_SHORT 或 Toast.LENGTH_LONG。本文将详细介绍如何使用 WindowManager 实现自定义 Toast...

    android 解决Toast重复显示问题

    在Android开发中,`Toast`是一种轻量级的...通过以上方法,我们可以有效地解决`Toast`在Android应用中重复显示的问题,提高用户体验。在实际开发中,应根据具体场景选择合适的方法,遵循最佳实践,避免出现这类问题。

    android 4.0以下屏蔽Home键

    在Android 4.0(Ice Cream Sandwich)以下的版本,实现这一功能的方法与后续版本有所不同,因为Android系统对权限和API的控制相对宽松。下面将详细介绍如何在Android 4.0及更低版本下屏蔽Home键。 首先,我们需要...

    Android Toast 自定义背景、图片 随心使用

    在Android中,我们可以通过`Toast.makeText()`方法来创建一个`Toast`实例,并设置显示的文本: ```java Toast.makeText(context, "Hello, World!", Toast.LENGTH_SHORT).show(); ``` 现在,让我们转向自定义`Toast...

    Android Service中使用Toast无法正常显示问题的解决方法

    本文实例讲述了Android Service中使用Toast无法正常显示问题的解决方法。分享给大家供大家参考,具体如下: 在做Service简单练习时,在Service中的OnCreate、OnStart、OnDestroy三个方法中都像在Activity中同样的...

    Android 优化加载中的Toast,实现真正的夹在过渡动画 源码

    在Android开发中,为了给用户提供即时的反馈信息,我们经常使用`Toast`类来显示短暂的通知。然而,Android原生的`Toast`功能有限,样式单一且无法自定义动画效果。针对这一问题,开发者们创建了各种扩展库,以增强`...

    Android Toast hook方案,解决小米手机toast问题

    小米mimu系统,会对toast进行拦截,在用户提交的toast 消息体拼接一个前缀,由于该种会导致插件工程出现资源错乱,获取appLabel异常,现我们通过hook 动态代理,对消息发送做一个劫持,修改消息信息,还原原来的消息

    Android-屏蔽系统通知Toast无法显示的解决方案v2.0.0

    本文将深入探讨这个问题,并提供一个解决方案——"Android-屏蔽系统通知Toast无法显示的解决方案v2.0.0"。 首先,理解Android系统的通知机制是至关重要的。Android的通知是由NotificationManager服务管理的,它允许...

    android service toast 01

    在“android service toast 01”这个项目中,我们关注的是如何在Service中正确地使用Toast。首先,我们需要了解Service的生命周期。Service的启动有两种方式:通过`startService()`和`bindService()`。`startService...

    自定义Toast及解决重复出现Toast的问题

    在Android开发中,Toast是一种轻量级的通知方式,它能够在屏幕中央或底部显示短暂的信息,然后自动消失。然而,原始的Toast有时无法满足开发者对于样式、持续时间或交互的需求,因此,自定义Toast就显得尤为重要。...

    android自定义dialog和Toast

    在Android开发中,自定义Dialog和Toast是提升用户体验和界面个性化的重要手段。Dialog通常用于向用户展示重要信息或需要用户做出决策的情况,而Toast则用于轻量级的通知,不打断用户的当前操作。以下是对如何自定义...

    ReactNativeToast一个用于android和ios类似于androidtoast提示控件

    安装完成后,将其导入到你的React组件中,然后在适当的地方调用其提供的方法,如`show`来显示Toast。 例如: ```jsx import Toast from 'react-native-toast'; // 显示一个简单的Toast Toast.show('这是一个Toast...

    Android全局Toast工具类

    全局Toast工具类,作用:连续显示toast提示时取消上一个toast 通过ToastUtil.toast(Context(), "文本")调用

    Android学习笔记之Button,Toast,menu的简单用法

    在这里,`makeText()`方法用于创建Toast对象,第一个参数是上下文,第二个参数是要显示的文本,第三个参数是显示时间,LENGTH_SHORT表示短时显示,LENGTH_LONG表示长时间显示。 最后,我们来了解一下Menu。在...

Global site tag (gtag.js) - Google Analytics