@benjosantony建议你应该在onResume
打开你的抽屉里,但它不能保证该活动将是可见当时:
的onResume是不是你 活动是可见的最佳指标用户;使用onWindowFocusChanged(布尔)肯定知道 你的活动是给用户
你会认为你可以只使用onWindowFocusChanged
和做可见的,但你不能。目前仍然打破(至少对我来说)抽屉的动画过渡动画..
对于API 21+:
有onEnterAnimationComplete
在那里你可以打开你的抽屉,看到动画正常。然而21+是,这只是太大的要求..
对于较低的API:
我能想到的唯一可能的途径是与主题调整除去活动的动画:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowAnimationStyle">@null</item>
</style>
而且打开抽屉,像这样:
private static final String DRAWER_STATE = "mDrawerOpened";
private DrawerLayout mDrawer;
private ListView mDrawerList;
private boolean mDrawerOpened;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDrawer = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.left_drawer);
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (!mDrawerOpened && hasFocus) {
mDrawer.openDrawer(mDrawerList);
mDrawerOpened = true;
}
}
@Override
protected void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putBoolean(DRAWER_STATE, mDrawerOpened);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
mDrawerOpened = savedInstanceState.getBoolean(DRAWER_STATE);
}
这将动画只有当活动开始的抽屉。
当你的活动异常破坏布尔值被保存,例如轮换或需要系统资源。
如果您不喜欢设置instanceState,您可以使用SharedPreferences
作为@Biu的建议,但IMO不会是正确的解决方案,因为android已经提供了相应的工具,因此无需重新发明自行车。
Android的用户知道滑动菜单,它是已知的UI模式。所以你不需要在你的应用程序中实现这种行为。 – gio 2014-12-27 16:05:03
这就是我的想法。无论如何,我想知道什么时候调用任何东西,以便在用户启动应用程序并且用户界面(至少部分)加载时启动它。 – natario 2014-12-27 16:07:48
使用处理程序并发布调用opendrawer()的runnable。 – ElDuderino 2014-12-27 23:02:14