【发布时间】:2016-02-20 15:26:21
【问题描述】:
我正在编写一个用于工作的旧 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 已经将背景淡化为透明。当过渡结束时,这一切都消失了。
那么 - 让应用知道登录活动现已消失并且此处的后退按钮应该退出应用而不是尝试返回的正确方法是什么?
【问题讨论】:
-
你可以使用 (onBackPressed()) -- stackoverflow.com/questions/17719634/…
-
@Tasos 谢谢,成功了。刚刚将
finish()添加到onBackPressed()方法中。想把它变成一个正确的答案以便我接受吗? -
给链接中的人打分
标签: android material-design android-transitions activity-transition