如何在Nougat的多窗口模式中定位吐司?

时间:2016-10-13 10:42:25

标签: android android-toast android-7.0-nougat

在使用Nougat的新多窗口模式时,我注意到如果我自己的应用程序在纵向模式下位于顶部窗口,则Toast将显示在另一个应用程序上。

enter image description here

这......根本不好。所以我尝试将Toast跟在this answer之后放到"如何在Android中更改Toast的位置?"

toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);

不幸的是,Gravity似乎被解释为"屏幕的重力"不是"重力为我的窗户"。

如何在靠近窗口底部的某处显示Toast并水平居中?

enter image description here

2 个答案:

答案 0 :(得分:3)

我怀疑这是预期的行为。除了没有任何直接的方式来实现你想要的东西,根据Material Design Guidelines Toasts主要用于传达系统信息,应该出现在屏幕的底部。

我的猜测是,任何系统消息都应该与设备整体相关,并且不一定是特定于应用程序的,因此这种一致的行为是有道理的。也就是说,我可以看出为什么这种行为是不受欢迎的,因为Toast最终占据了其中一个应用程序屏幕的几乎25%...然而,无论Toast的位置如何,它都会吞噬那个屏幕真实遗产,无论是在您的申请还是以下申请。

如果你真的想要实现一种解决方法,这里是垂直偏移Toast的实现。稍微变化应该可以实现横向模式,但它更有一点点。

DIR* pDIR = opendir(directoryName.c_str());
  struct dirent* entry = nullptr;

  vector<string> fileNames;

  while(entry = readdir(pDIR)) {
    if (strcmp(entry->d_name, ".") != 0 && strcmp(entry->d_name, "..") != 0 )
      fileNames.push_back(entry->d_name);
  }
  closedir(pDIR);

答案 1 :(得分:0)

使用带参数的setGravity方法:xOffset,yOffset。

Toast toast= Toast.makeText(getApplicationContext(),"Message Toast", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.TOP|Gravity.CENTER_HORIZONTAL, 0, 0);
toast.show();