3

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」がタップされたときに検出する方法はありますか? それは私の問題を解決するでしょう。グーグルで検索しましたが、何も見つかりませんでした。

4

1 に答える 1

1

ActionBarSherlock についてはよくわかりません。しかし、Android SearchViewウィジェットではこれを使用できます

searchView = (SearchView) menu.findItem(R.id.action_search)
                .getActionView();
        //Get the ID for the search bar LinearLayout
        int searchBarId = searchView.getContext().getResources().getIdentifier("android:id/search_bar", null, null);
        //Get the search bar Linearlayout
        LinearLayout searchBar = (LinearLayout) searchView.findViewById(searchBarId);
        //Give the Linearlayout a transition animation.
        searchBar.setLayoutTransition(new LayoutTransition());
于 2014-08-08T16:36:47.477 に答える