Android appcompat API 10 collapse action view -
i'm developing , android app needs support api10+ followed many tutorials set appcompat manage create action bar.
links like: https://stackoverflow.com/a/21291156/2789106 http://developer.android.com/guide/topics/ui/actionbar.html
there 3 things cannot do.
- when search opens, search magnifier not change drawable set.
- i cannot change "back" icon (the home button, left logo (it's diferrent image 1 passed in creation of
drawertoggle)) - i cannot programmatically close (collapse) action view when keyboard search clicked. (calling
collapseactionview()inplemented in api 14)
here's code:
protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); // actionbardrawertoggle ties the proper interactions // between sliding drawer , action bar app icon mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout, r.drawable.ic_navigation_drawer, r.string.navigation_drawer_open, r.string.navigation_drawer_close) { /** called when drawer has settled in closed state. */ public void ondrawerclosed(view view) { supportinvalidateoptionsmenu(); // creates call onprepareoptionsmenu() } /** called when drawer has settled in open state. */ public void ondraweropened(view drawerview) { supportinvalidateoptionsmenu(); // creates call onprepareoptionsmenu() } }; // set drawer toggle drawerlistener mdrawerlayout.setdrawerlistener(mdrawertoggle); // restore app state if if (savedinstancestate == null) { mleftmenucontainer = (linearlayout) findviewbyid(r.id.left_menu_container); mleftmenucontainer.setontouchlistener(new view.ontouchlistener() { @override public boolean ontouch(view arg0, motionevent arg1) { // return true avoid tap on view return true; } }); mdrawerlayout.closedrawer(mleftmenucontainer); } // enable actionbar app icon behave action toggle nav drawer getsupportactionbar().setdisplayhomeasupenabled(true); getsupportactionbar().sethomebuttonenabled(true); getsupportactionbar().setdisplayshowtitleenabled(true); getsupportactionbar().setlogo(r.drawable.ic_action_bar_logo); } /* called whenever call supportinvalidateoptionsmenu() */ @override public boolean onprepareoptionsmenu(menu menu) { // if nav drawer open, hide action items related content // view if (mdrawerlayout != null && mleftmenucontainer != null) { boolean draweropen = mdrawerlayout.isdraweropen(mleftmenucontainer); (int = 0; < menu.size(); i++) { menu.getitem(i).setvisible(!draweropen); } } return super.onprepareoptionsmenu(menu); } @override protected void onpostcreate(bundle savedinstancestate) { super.onpostcreate(savedinstancestate); // sync toggle state after onrestoreinstancestate has occurred. mdrawertoggle.syncstate(); } @override public void onconfigurationchanged(configuration newconfig) { super.onconfigurationchanged(newconfig); mdrawertoggle.onconfigurationchanged(newconfig); } @override public boolean oncreateoptionsmenu(menu menu) { mmenu = menu; // inflate menu; adds items action bar if present. // enable actionbar app icon behave action toggle nav drawer getmenuinflater().inflate(r.menu.main, menu); menuitem searchitem = menu.finditem(r.id.action_bar_search); final searchview searchview = (searchview) menuitemcompat.getactionview(searchitem); searchmanager searchmanager = (searchmanager) getsystemservice(context.search_service); searchableinfo info = searchmanager.getsearchableinfo(getcomponentname()); searchview.setsearchableinfo(info); autocompletetextview searchtext = (autocompletetextview) searchview.findviewbyid(android.support.v7.appcompat.r.id.search_src_text); searchtext.sethinttextcolor(getresources().getcolor(r.color.color_action_bar_search_text)); searchtext.settextcolor(getresources().getcolor(r.color.color_action_bar_search_text)); searchview.seticonifiedbydefault(true); // getting 'search_plate' linearlayout. view searchplate = searchview.findviewbyid(android.support.v7.appcompat.r.id.search_plate); // setting background of 'search_plate' personal defined drawable. if (searchplate != null) { searchplate .setbackgroundresource(r.drawable.texfield_search_view_theme); } // set search view clear icon imageview searchiconclearview = (imageview) searchview .findviewbyid(android.support.v7.appcompat.r.id.search_close_btn); if (searchiconclearview != null) { log.v(log_tag, "should change clear icon here"); searchiconclearview .setimageresource(r.drawable.ic_action_bar_clear_search); } // set search view magnifier icon imageview searchicon = (imageview) searchview.findviewbyid(android.support.v7.appcompat.r.id.search_mag_icon); if (searchicon != null) { log.v(log_tag, "should change search icon here"); searchicon.setimageresource(r.drawable.ic_action_bar_back); } // set on click open fragment, not activity final searchview.onquerytextlistener querytextlistener = new searchview.onquerytextlistener() { @override public boolean onquerytextchange(string newtext) { // return true; } @override public boolean onquerytextsubmit(string query) { log.v(log_tag, "performed search with: " + query); searchview.clearfocus(); return true; } }; searchview.setonquerytextlistener(querytextlistener); menuitemcompat.setonactionexpandlistener(searchitem, new onactionexpandlistener() { @override public boolean onmenuitemactioncollapse(menuitem arg0) { mmenu.finditem(r.id.action_bar_cart).setvisible(true); return true; } @override public boolean onmenuitemactionexpand(menuitem arg0) { getsupportactionbar().seticon(r.drawable.ic_action_bar_logo); mmenu.finditem(r.id.action_bar_cart).setvisible(false); return true; } }); return super.oncreateoptionsmenu(menu); } can please tell me if i'm doing wrong?
-- edit --
i managed fix question number 1 , 2:
what need define homeupicon in theme. if supporting api 10 me:
<style name="theme.mytheme" parent="@style/theme.appcompat.light"> <item name="searchviewsearchicon">@drawable/your_search_icon</item> <!-- api 13- support --> <item name="homeasupindicator">@drawable/your_back_icon</item> <!-- api 14+ --> <item name="android:homeasupindicator">@drawable/your_back_icon</item> </style> found in
actionbarsherlock: changing homeasupindicator doesn't work
, changing background drawable of searchview widget
the important question still pending , if knows answer please post here!
try this:
public boolean onquerytextsubmit(string query) { menuitemcompat.collapseactionview(searchitem); return false; }
Comments
Post a Comment