我已经成功地将 ActionBarSherlock
集成到我的 Android 项目中。现在,我想在 ActionBar 中添加一个 搜索小部件
,并已经成功地完成了这个任务。接下来,我希望在展开时从右侧滑入 Searchview
,在折叠时向右滑出。我有两个 XML 动画可以实现这一点。
search_in.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate
android:duration="1000"
android:fromXDelta="100%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%" />
</set>
search_out.xml
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false" >
<translate
android:duration="700"
android:fromXDelta="0%"
android:fromYDelta="0%"
android:toXDelta="100%"
android:toYDelta="0%" />
</set>
它们被称为在SherlockFragmentActivity内部的表单
public boolean onCreateOptionsMenu(Menu menu) {
...
final SearchView searchView = new SearchView(this.getSupportActionBar().getThemedContext());
final Animation in = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.search_in);
final Animation out = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.search_out);
out.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationEnd(Animation animation) {
searchView.setIconified(true);
}
@Override
public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub
}
});
menu.add("Search")
.setIcon(android.R.drawable.ic_menu_search)
.setActionView(searchView)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
final MenuItem searchMenuItem = menu.getItem(0);
searchView.setQueryHint(getResources().getText(R.string.searchHint));
searchView.setIconifiedByDefault(true);
searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean queryTextFocused) {
if(!queryTextFocused){
searchView.startAnimation(out);
searchMenuItem.collapseActionView();
}
else
searchView.startAnimation(in);
}
});
return super.onCreateOptionsMenu(menu);
}//end onCreateOptionsMenu
}
目前的界面如下所示(由于我不能发布图片...):
http://i194.photobucket.com/albums/z31/raitono/SearchviewCollapseProblem_zpsefee50e9.gif
当点击图标时,search_in
动画效果非常好,当按下返回键时,search_out
也能正常工作。问题出在我试图通过小 X 收起 Searchview 时。似乎 Searchview 在动画调用之前就已经折叠了,我不知道该怎么办。我也尝试过 searchView.onActionViewCollapsed()
,但没有任何效果。我的猜测是需要拦截当 X 被按下时的调用,并先执行动画。
我正在尝试支持低至 2.3.5 版本的设备。如果您能提供帮助,将不胜感激。
更新:有没有办法检测到当小 'X' 被点击时?那样可以解决我的问题。我一直在谷歌搜索,但还没有找到什么。
search_out.xml
更改为<translate android:duration="1000" android:fromXDelta="0%" android:fromYDelta="0%" android:toXDelta="200%" android:toYDelta="0%" />
。 - GrIsHu