2013-03-01 76 views
2

我已經在我的android項目中實現了ActionBarSherlock,沒有任何問題。我現在正在嘗試將一個search widget添加到ActionBar併成功完成。現在,我想讓Searchview在展開時從右側滑入,在摺疊時從右側滑入。我有兩個XML動畫,我相信允許我這樣做。SearchView在ActionBarSherlock中的崩潰動畫

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.onActionViewCollapsed(),但那沒什麼好處。我的猜測是,我需要以某種方式攔截按下X時所做的調用並首先執行動畫。

我試圖支持低至2.3.5的設備。任何幫助,這將不勝感激。

更新:無論如何檢測何時點擊小的「X」?這將解決我的問題。我一直在谷歌搜索,但一直沒有找到任何東西。

+0

試圖改變你的'search_out.xml'作爲'<翻譯 機器人:時間= 「1000」 機器人:fromXDelta = 「0%」 機器人:fromYDelta = 「0%」 android:toXDelta =「200%」 android:toYDelta =「0%」/>' – GrIsHu 2013-03-01 07:46:33

+0

當我做出這個改變時,它採取了同樣的方式。唯一明顯的區別是圖標移動較慢。 – Bpainter 2013-03-01 15:33:28

+0

我最近改變了我是如何做到這一點的。我在操作欄中使用了一個帶有編輯文本的自定義視圖。然後,我可以通過點擊'X'來解決問題,但現在它不起作用,爲什麼我使用後退按鈕。 – Bpainter 2013-05-30 04:02:48

回答

1

我不確定ActionBarSherlock。但在Android的搜索查看小工具,你可以使用這個

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()); 
+2

如果您使用新的工具欄,則無法使用 – 2015-04-22 14:22:20

+0

我猜「android:id/search_bar」不是公共API的一部分。由於哪個searchBar始終爲空。 – 2016-11-20 10:18:12