按下向上按钮时的自定义 Activity 转换
Posted
技术标签:
【中文标题】按下向上按钮时的自定义 Activity 转换【英文标题】:Custom Activity transition when up button is pressed 【发布时间】:2017-04-14 10:39:06 【问题描述】:每当我从当前 activity 按下向上按钮时,父片段从右边缘向左滑动,这似乎是默认的过渡行为。但我希望父 Activity 滑动从左边缘向右。
我已经将onBackPressed
与overridePendingTransition
和自定义转换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>
我已经检查了很多答案,但它们似乎令人困惑和矛盾。我认为必须有一种优雅而有效的方法来实现这一点,因为许多应用程序都使用它。请帮助我。谢谢。
【问题讨论】:
你可以试试这个,@Override public boolean onKeyDown(int keyCode, KeyEvent event) if(event.getKeyCode()==KeyEvent.ACTION_DOWN) return super.onKeyDown(keyCode, event) ; @Vadivel 我不明白这段代码应该做什么。请你解释一下。 【参考方案1】:将overridePendingTransition
放在调用super.onBackPressed()
上面它必须工作
【讨论】:
【参考方案2】:向上导航按钮由onOptionsItemSelected
处理。所以覆盖它:
@Override
public boolean onOptionsItemSelected(MenuItem item)
switch (item.getItemId())
case android.R.id.home:
finish();
return true;
return super.onOptionsItemSelected(item);
请注意,此onOptionsItemSelected
实现假定您的父活动已经启动,并且是您的后台堆栈中的下一个活动。除了完成当前的任务之外,您可能还需要启动它。
覆盖Activity
的finish
方法以设置转换:
@Override
public void finish()
super.finish();
overridePendingTransition(R.anim.slide_in, R.anim.slide_out);
此外,您似乎对 overridePendingTransition
方法名称感到困惑。它以 animations 作为参数,而不是 transitions。
这将是您的 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
而不是res/transition
。
【讨论】:
你能解释一下,如何创建 anim.slide_in 吗? 谢谢。但也没有调用完成。我已经使用日志检查过。 哦,好吧,对不起,我忽略了你的问题。使用 Up 按钮确实不会调用finish()
。我更新了处理 Up 案例的答案。
非常感谢。知道了。顺便说一句,我认为您输入的方法名称为 onUpdateItemSelected 而不是 onOptionsItemSelected。
好收获!我的复制/粘贴技能虐待了我 ;-) 已修复,谢谢。以上是关于按下向上按钮时的自定义 Activity 转换的主要内容,如果未能解决你的问题,请参考以下文章
确定在 Swift 的自定义 listView 单元格中按下了哪个按钮