我正在编写一个新版本的旧Android应用程序,通过使用材料设计指南,图标和效果使其更新。
我有一个登录屏幕作为我的第一个活动,我在onCreate
方法中设置了退出转换:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
getWindow().setExitTransition(exitTransition());
...
private Transition exitTransition()
{
Fade fade=new Fade();
fade.excludeTarget(android.R.id.statusBarBackground, true);
fade.excludeTarget(android.R.id.navigationBarBackground, true);
return fade;
}
...不包括状态栏和导航栏,以避免它们褪色为白色然后再回到主要深色。
我使用以下方法设置了主要活动:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
getWindow().requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS);
super.onCreate(savedInstanceState);
getWindow().setEnterTransition(enterTransition());
...
private Transition enterTransition()
{
Slide slide=new Slide();
slide.excludeTarget(android.R.id.statusBarBackground, true);
slide.excludeTarget(android.R.id.navigationBarBackground, true);
slide.setSlideEdge(Gravity.END);
return slide;
}
然后,我使用以下代码从登录活动中启动主要活动:
Intent myIntent=new Intent(getApplicationContext(), MainActivity.class);
myIntent.putExtra("vehicles", sb.toString());
startActivity(myIntent, ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this, toolbar, "toolbar").toBundle());
new Handler().postDelayed(new Runnable()
{
@Override
public void run()
{
//Finish the login activity so it can't be returned to.
LoginActivity.this.finish();
}
}, 1000);
我不希望后退按钮在完成时将用户带回登录页面,因为这没有任何意义,所以我使用延迟完成以避免发生闪烁我在清单中使用noHistory
。可能有更好的方法可以做到这一点,但到目前为止,我的Google搜索还没有提出更好的方法。
这一切都按照我的意愿行事。问题是当我从主要活动中按下后退按钮时。该应用程序尝试转换回现已完成的登录活动,而不是以正常方式退出应用程序,而不是:
如您所见,共享工具栏尚未消失,FAB尚未消失,RecyclerView已将背景淡化为透明。当过渡结束时,这一切都消失了。
那么 - 让应用知道登录活动现在已经消失的正确方法是什么,而此处的后退按钮应该退出应用而不是尝试转换回去?
答案 0 :(得分:0)
尝试将以下标记设置为Intent
//...setup intent
//set CLEAR_TASK and NEW_TASK flags
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(myIntent, ActivityOptionsCompat.makeSceneTransitionAnimation(LoginActivity.this, toolbar, "toolbar").toBundle());