SearchView在Android中展开/折叠动画

时间:2015-07-03 16:41:38

标签: android android-actionbar android-animation

我有什么

我有一个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始终为null,因此我无法在其上设置布局转换。

我可以获得解决方案吗?我的方法是否正确?

3 个答案:

答案 0 :(得分:8)

您实际上可以通过执行以下操作来获取LinearLayout:

$em->rollback()

所以,

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

答案 1 :(得分:2)

在阅读@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>

答案 2 :(得分:0)

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