简单的Android吐司没有正确对齐

时间:2014-02-12 23:04:48

标签: android android-toast

我只是来自我的Activity

Toast.makeText(this, "This is a toast", Toast.LENGTH_SHORT).show()

但是结果是在toast容器顶部对齐的文本,没有像它应该的那样居中:

enter image description here

关于什么可能出错的任何想法?

2 个答案:

答案 0 :(得分:31)

我设法解决了这个问题。问题在于将属性android:fitsSystemWindows应用于活动的主题。我发现this answer解释了为什么不应该这样做:

  

android:fitsSystemWindows属性适用于布局xml中的视图,而不是主题。

     

您所看到的是样式属性的效果   系统适用于Android。如果视图上未指定任何属性   元素或以给定视图的显式样式,框架   检查是否已在主题上指定该属性   本身。如果在那里找到,则使用该值。由于使用的意见   通过toasts使用您的活动的主题,默认值为false   被覆盖,你会看到这种行为。

     

您不只是更改了适合您的fitsSystemWindows默认设置   通过在主题中指定顶级视图,您将覆盖它   对于具有该主题的所有视图,这不是您想要的。你应该   仅在布局或中的视图上指定fitsSystemWindows   您明确应用于布局中的视图的样式,而不是   主题。

只需将该属性应用于活动的最顶层ViewGroup(或样式),而不是其主题,并且烤面包将被正确格式化。

答案 1 :(得分:0)

之所以会发生这种情况,是因为在水平屏幕状态下,无论是否隐藏了导航栏,导航栏的宽度都会被计算出来,因此您可以减去导航栏宽度的一半。

toast.setGravity(Gravity.CENTER, getNavigationBarHeight() / 2, 0); 

    private int getNavigationBarHeight() {
        Resources resources = this.getResources();
        int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
        if (resourceId > 0) {
            return resources.getDimensionPixelSize(resourceId);
        }
        return 0;
    }