按下向上按钮时的自定义活动转换

时间:2016-11-30 07:35:30

标签: android android-layout android-fragments android-activity android-actionbar

每当我从当前活动按下向上按钮时,父片段从右边缘向左滑动,这似乎是默认的过渡行为。但我希望父活动能够滑动从左边缘向右。

我已将onBackPressedoverridePendingTransition和自定义转换xml文件一起使用,但我的onBackPressed永远不会被调用。

这是我的java代码。

public class TakeOrderItems extends AppCompatActivity {

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_take_order_items);

    //Get the actionbar to set the back button
    ActionBar ab = getSupportActionBar();
    ab.setDisplayHomeAsUpEnabled(true);

/* 
  CODE TO CREATE AND DISPLAY EXPANDABLELISTVIEW
                                               */


@Override
public void onBackPressed() {
    super.onBackPressed();
    Log.i("Good","back pressed");
    overridePendingTransition(R.transition.slide_in,R.transition.slide_out);
}

XML转换文件

slide_in.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="-100%"
    android:toXDelta="0"
    android:duration="200" />
</set>

slide_out.xml

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
<translate
    android:fromXDelta="0"
    android:toXDelta="100%"
    android:duration="200" />
</set>

我已经检查了许多答案,但它们似乎令人困惑和矛盾。我认为必须有一种优雅而有效的方法来实现这一点,因为许多应用程序都使用它。请帮助我。谢谢。

2 个答案:

答案 0 :(得分:1)

overridePendingTransition置于调用super.onBackPressed()之上,它必须正常工作

答案 1 :(得分:0)

Up 导航按钮由onOptionsItemSelected处理。所以覆盖它:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            finish();
            return true;
    }

    return super.onOptionsItemSelected(item);
}

请注意,此onOptionsItemSelected实现假定您的父活动已经启动,并且是您的Backstack上的下一个活动。除了完成当前版本之外,您可能还想启动它。

覆盖finish的{​​{1}}方法以设置转场:

Activity

此外,您似乎对@Override public void finish() { super.finish(); overridePendingTransition(R.anim.slide_in, R.anim.slide_out); }方法名称感到困惑。它将动画作为参数,而不是过渡

这将是您的overridePendingTransition等效物:

slide_in

<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="-100%" android:toXDelta="0%" android:duration="200"/> </set>

slide_out

只需将这些文件放在<set xmlns:android="http://schemas.android.com/apk/res/android" android:shareInterpolator="false"> <translate android:fromXDelta="100%" android:toXDelta="200%" android:duration="200"/> </set>而不是res/anim