在使用Nougat的新多窗口模式时,我注意到如果我自己的应用程序在纵向模式下位于顶部窗口,则Toast
将显示在另一个应用程序上。
这......根本不好。所以我尝试将Toast
跟在this answer之后放到"如何在Android中更改Toast的位置?"
toast.setGravity(Gravity.BOTTOM|Gravity.CENTER_HORIZONTAL, 0, 0);
不幸的是,Gravity
似乎被解释为"屏幕的重力"不是"重力为我的窗户"。
如何在靠近窗口底部的某处显示Toast
并水平居中?
答案 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();