ActionBarSherlock
問題なくAndroidプロジェクトに実装しました。私は今search widget
、ActionBar に a を追加しようとしていますが、成功しました。Searchview
ここで、展開したときに右からスライドインし、折りたたんだときに右にスライドさせたいと思います。私はそれを可能にすると信じている 2 つの 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」がタップされたときに検出する方法はありますか? それは私の問題を解決するでしょう。グーグルで検索しましたが、何も見つかりませんでした。