Android中SearchView的展开/折叠动画

13

我拥有什么

我有一个完美工作的SearchView,但是当我点击它时,它会突然出现并消失。没有任何过渡动画播放,所以看起来不好。

我想要什么

当SearchView被展开和折叠时,我希望能够播放简单的左滑和右滑动画。

我尝试了什么

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

但是searchBar始终为空,因此我无法在其上设置布局转换。

我能得到解决方案吗?我的方法正确吗?


有人可以在这里发表建议吗? - Aritra Roy
我知道现在已经很晚了,但如果你仍在寻找答案,希望以下链接能够帮到你。 Android Search View Sample - Ilanthirayan Paramanathan
3个回答

12

你实际上可以通过以下方式直接获取LinearLayout:

LinearLayout searchBar = (LinearLayout) searchView.findViewById(R.id.search_bar);

所以你应该写成这样,

SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
final int searchBarId = searchView.getContext().getResources().getIdentifier("android:id/search_bar", null, null);  // Remove this line 

//  The modified Line
LinearLayout searchBar = (LinearLayout) searchView.findViewById(R.id.search_bar);  

searchBar.setLayoutTransition(new LayoutTransition());

2
是的,searchBar现在不为空了,也不会再出现NullPointerException了。但是动画效果不是我想要的那种。在展开/折叠时没有左滑/右滑动画效果。我会在得到完整答案后接受回答。谢谢。 - Aritra Roy
1
你能帮我提供完整的解决方案吗? - Aritra Roy
2
一个奇怪的动画仍然是一种动画... 谢谢@Steven! - Maxinne
谢谢!你救了我的屏幕,不再模糊了))) - Georgiy Chebotarev

4

阅读了 @Steven 的答案后,我得到了以下解决方案:

onCreateOptionsMenu(Menu menu) 方法中写下以下代码:

    getMenuInflater().inflate(R.menu.meet_people_menu, menu);
    final MenuItem searchItem = menu.findItem(R.id.app_bar_search);
    SearchView searchView = (SearchView) searchItem.getActionView();
    LinearLayout searchBar = (LinearLayout) searchView.findViewById(R.id.search_bar);
    searchBar.setLayoutTransition(new LayoutTransition());

这是我的meet_people_menu.xml文件:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    tools:context="com.jz.cso.activities.MeetPeopleActivity">
<item
    android:title=""
    android:id="@+id/app_bar_search"
    android:icon="@drawable/ic_search_black_24dp"
    app:actionViewClass="android.support.v7.widget.SearchView"
    app:showAsAction="always"
    ></item>
</menu>

那是一個流暢的動畫。 - user578386

0
View searchBar = searchView.findViewById(R.id.search_bar);
if (searchBar != null && searchBar instanceof LinearLayout) {
     ((LinearLayout) searchBar).setLayoutTransition(new LayoutTransition());
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接