将支持库更新到27.1.0后的新错误

时间:2018-03-18 13:01:43

标签: android android-support-library

我使用支持库版本25.3.1很长一段时间了,但由于我也想支持更新的设备,我决定将支持库更新到最新版本。

但在更新到27.1.0后,我遇到了Snackbar的奇怪问题。我不知道这个问题是否适用于其他所有控件,但这对于Snackbar来说是一个非常刺激的(而且显而易见的)。

现在问题是什么?这很简单:如果你经常更新UI,显示Snackbar没有正确完成并且定位不正确。创造这种情况很简单。只需创建一个新的基本活动并按如下方式更改onCreate

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });

    final TextView tv = (TextView)findViewById(R.id.test_text);
    Timer t = new Timer();
    t.schedule(new TimerTask() {
        @Override
        public void run() {
            tv.post(new Runnable() {
                @Override
                public void run() {
                    tv.setText(mVal.toString());
                    mVal++;
                }
            });
        }
    }, 0, 300);
}

此代码每300ms更新一次TextView。现在,如果您按FAB键,则会看到Snackbar定位错误。它不会精确定位在屏幕的底部,通常会高一点。您可能需要测试几次以查看此问题,但通常您是第一次看到它。 注意:我没有在模拟器中看到这个问题,但我在实际的设备中看到了它。例如,它显示在我的Galaxy S5和其他一些设备上。这些较新的支持库的硬件需求似乎显着增加,或者显示Snackbar时出现错误。

知道为什么会这样吗?我该怎么办呢?

最好的问候

1 个答案:

答案 0 :(得分:0)

Snackbar使用的视图更改为CoordinatorLayout

rootLayout = findViewById(...);
Snackbar.make(rootLayout, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();