Android Toast在屏幕上移动

时间:2016-02-05 17:36:42

标签: android galaxy android-toast

我的Android应用程序显示多个Toast消息。我最近在运行Android 5.1.1的Galaxy S6上安装了它,并注意到消息最初显示在屏幕中心周围,然后它们移动到正确位置(如果没有指定重力,则接近底部),然后返回到在逐渐消失之前的初始位置。

Context context = getApplicationContext();
String newMsg = getString(R.string.wild_card_msg);
Toast mToast = Toast.makeText(context, newMsg, Toast.LENGTH_LONG); 
mToast.setGravity(Gravity.CENTER, 0, 0);
mToast.show(); 

更新

  • 我已经升级了支持库,并将compile-sdk和target sdk设置为最新的API。这没有解决问题
  • 我删除了所有.setGravity()调用。没有变化。
  • 我注意到Toast消息在安装后第一次执行时表现正常(无论是在USB调试模式下还是从PlayStore下载),但问题在(所有)后续运行时重新出现。
  • 我还发现,如果我触摸屏幕(任何地方),我的Toast消息会立即消失。我认为Toast显示不受用户交互的影响。

其他人遇到此问题,知道如何解决或知道解决方法吗?

请注意,我已经接受了Nick的回答,建议使用snackBar作为解决方法。

3 个答案:

答案 0 :(得分:7)

您的问题要求修复或解决方法。最简单的解决方法(在我看来)也是最好的选择,因为它会让您使用更现代的组件:切换到小吃吧。

简单小吃:

//on a fragment you can simply use getView(), otherwise give it the root view of your
//layout so that the snackbar can use it to find context

Snackbar.make(getView(), "The toast text", Snackbar.LENGTH_SHORT).show();

它位于支持设计库中以实现兼容性。

这是一个小吃吧:

enter image description here

可以包含在gradle中的一些支持/设计库是

compile 'com.android.support:design:23.1.1'
compile 'com.android.support:support-v4:23.1.1'
compile 'com.android.support:appcompat-v7:23.1.1'

答案 1 :(得分:3)

这是因为供应商使用他们的产品部署的定制版Android,对于Activity动画也是如此, 您可以通过扩展Toast类并提供自己的动画和样式或使用开源库显示Toast消息来在所有设备上实现所需的行为,因为为活动设置自定义动画的活动会在所有设备上创建常量动画。

答案 2 :(得分:-2)

尝试这个简单的Toast

Toast.makeText(getApplicationContext(),"Your message", Toast.LENGTH_SHORT).show();