我正在尝试实现动画搜索视图(带有简单的扩展/折叠动画),但是该论坛中的所有答案均不起作用.
<item androID:ID="@+ID/action_search" androID:orderIncategory="100" androID:title="@string/action_search" app:actionVIEwClass="androID.support.v7.Widget.SearchVIEw" androID:icon="@drawable/ic_search_white_48px" app:showAsAction="always"/>
我做了什么
@OverrIDepublic boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); 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()); return true;}
所有错误:
E/AndroIDRuntime: FATAL EXCEPTION: main Process: com.daveslab.wIDevIEw, PID: 2459 java.lang.NullPointerException: Attempt to invoke virtual method 'voID androID.Widget.linearLayout.setLayoutTransition(androID.animation.LayoutTransition)' on a null object reference at com.daveslab.wIDevIEw.MainActivity.onCreateOptionsMenu(MainActivity.java:69) at androID.app.Activity.onCreatePanelMenu(Activity.java:2846) at androID.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:360) at androID.support.v7.vIEw.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:88) at androID.support.v7.app.AppCompatDelegateImplBase$AppCompatwindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:331) at androID.support.v7.vIEw.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:88) at androID.support.v7.app.Toolbaractionbar.populateOptionsMenu(Toolbaractionbar.java:454) at androID.support.v7.app.Toolbaractionbar.run(Toolbaractionbar.java:61) at androID.os.Handler.handleCallback(Handler.java:739) at androID.os.Handler.dispatchMessage(Handler.java:95) at androID.os.Looper.loop(Looper.java:148) at androID.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:616)
values.xml中的错误(所有图标均在项目中具有正确的名称):
Error:(1605, 21) No resource found that matches the given name: attr 'searchBackIcon'.
错误:(1602,21)找不到与给定名称匹配的资源:attr’searchBackground’.
错误:(1604,21)找不到与给定名称匹配的资源:attr’searchCloseIcon’.
错误:(1606,21)找不到与给定名称匹配的资源:attr’searchSuggestionBackground’.
错误:(1603,21)找不到与给定名称匹配的资源:attr’searchVoiceIcon’.
错误:(1605,21)找不到与给定名称匹配的资源:attr’searchBackIcon’.
错误:(1602,21)找不到与给定名称匹配的资源:attr’searchBackground’.
错误:(1604,21)找不到与给定名称匹配的资源:attr’searchCloseIcon’.
错误:(1606,21)找不到与给定名称匹配的资源:attr’searchSuggestionBackground’.
错误:(1603,21)找不到与给定名称匹配的资源:attr’searchVoiceIcon’.
错误:任务’:app:processDeBUGResources’的执行失败.
com.androID.IDe.common.process.ProcessException:无法执行aapt.
解决方法:
有一种更简单的方法(实际上,只有两行代码),而且没有错误.您需要做的是像以前一样在onCreateOptionsMenu()方法中填充SearchVIEw,但要避免在设置转换的代码行中使用,因为不再需要它们.
接下来,像这样重写onoptionsItemSelected():
@OverrIDepublic boolean onoptionsItemSelected(final MenuItem item) { switch(item.getItemID()) { case R.ID.action_search: TransitionManager.beginDelayedTransition((VIEwGroup) getActivity().findVIEwByID(R.ID.toolbar)); MenuItemCompat.expandActionVIEw(item); return true; } return super.onoptionsItemSelected(item);}
此代码准备一个过渡并侦听工具栏布局中的更改.当SearchVIEw出现时,动画开始.它使用与KitKat相同的API,但可从ICS开始使用.在您的build.gradle中:
compile 'com.androID.support:Transition:24.2.1'
如果您不喜欢默认值,也可以输入customize the transition.
总结以上是内存溢出为你收集整理的Java-Android:对SearchView进行动画处理全部内容,希望文章能够帮你解决Java-Android:对SearchView进行动画处理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)