我使用支持库版本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
时出现错误。
知道为什么会这样吗?我该怎么办呢?
最好的问候
答案 0 :(得分:0)
将Snackbar
使用的视图更改为CoordinatorLayout
rootLayout = findViewById(...);
Snackbar.make(rootLayout, "Replace with your own action", Snackbar.LENGTH_LONG).setAction("Action", null).show();