java - Get Logo (image) in menudrawer android -
i want place image @ bottom of menudrawer (google menu), doesn't work. have researched whole internet , tried can imagine (in java files , in xml files). still doesn't work. there example @ image below (red border):
the image below app menudrawer:
i appreciate help.
like said before want image @ bottom of menudrawer app above.
there few files related menu , in activity_main.xml got elements (like list items) of whole menu. tried place imageview in activity_main.xml not work. here stuck don't know how this. help.
here code of activity_main.xml imageview have placed:
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- framelayout display fragments --> <framelayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- listview display slider menu --> <listview android:id="@+id/list_slidermenu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choicemode="singlechoice" android:divider="@color/black_overlay" android:dividerheight="1dp" android:listselector="@drawable/list_selector" android:background="@color/black_overlay"/> <imageview android:contentdescription="@string/app_name" android:background="@drawable/solaylogo" android:maxwidth="30dp" android:maxheight="10dp"/> </android.support.v4.widget.drawerlayout>
the java code below related xml file:
package nl.vitaminen.solay; import java.util.arraylist; import nl.vitaminen.solay.r; import nl.vitaminen.solay.adapter.navdrawerlistadapter; import nl.vitaminen.solay.model.navdraweritem; //import nl.vitaminen.solay.r.array; //import nl.vitaminen.solay.r.drawable; //import nl.vitaminen.solay.r.id; //import nl.vitaminen.solay.r.layout; //import nl.vitaminen.solay.r.menu; //import nl.vitaminen.solay.r.string; import android.app.activity; import android.app.alertdialog; import android.app.fragment; import android.app.fragmentmanager; import android.content.intent; import android.content.res.configuration; import android.content.res.typedarray; import android.net.uri; import android.os.bundle; import android.support.v4.app.actionbardrawertoggle; import android.support.v4.widget.drawerlayout; import android.util.log; import android.view.keyevent; import android.view.menu; import android.view.menuitem; import android.view.view; import android.widget.adapterview; import android.widget.listview; public class mainactivity extends activity { private drawerlayout mdrawerlayout; private listview mdrawerlist; private actionbardrawertoggle mdrawertoggle; // nav drawer title private charsequence mdrawertitle; // used store app title private charsequence mtitle; // slide menu items private string[] navmenutitles; private typedarray navmenuicons; private arraylist<navdraweritem> navdraweritems; private navdrawerlistadapter adapter; int = 0; int j = 0; int k = 0; boolean security = false; boolean power = false; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); mtitle = mdrawertitle = gettitle(); // load slide menu items navmenutitles = getresources().getstringarray(r.array.nav_drawer_items); // nav drawer icons resources navmenuicons = getresources() .obtaintypedarray(r.array.nav_drawer_icons); mdrawerlayout = (drawerlayout) findviewbyid(r.id.drawer_layout); mdrawerlist = (listview) findviewbyid(r.id.list_slidermenu); navdraweritems = new arraylist<navdraweritem>(); // adding nav drawer items array // home navdraweritems.add(new navdraweritem(navmenutitles[0], navmenuicons.getresourceid(0, -1))); // berichten navdraweritems.add(new navdraweritem(navmenutitles[1], navmenuicons.getresourceid(1, -1))); // phone navdraweritems.add(new navdraweritem(navmenutitles[2], navmenuicons.getresourceid(2, -1))); // navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons.getresourceid(3, -1))); // settings navdraweritems.add(new navdraweritem(navmenutitles[4], navmenuicons.getresourceid(4, -1))); // example: navdraweritems.add(new navdraweritem(navmenutitles[3], navmenuicons.getresourceid(3, -1), true, "22")); // recycle typed array navmenuicons.recycle(); mdrawerlist.setonitemclicklistener(new slidemenuclicklistener()); // setting nav drawer list adapter adapter = new navdrawerlistadapter(getapplicationcontext(), navdraweritems); mdrawerlist.setadapter(adapter); // enabling action bar app icon , behaving toggle button getactionbar().setdisplayhomeasupenabled(true); getactionbar().sethomebuttonenabled(true); mdrawertoggle = new actionbardrawertoggle(this, mdrawerlayout, r.drawable.ic_drawer, //nav menu toggle icon r.string.app_name, // nav drawer open - description accessibility r.string.app_name // nav drawer close - description accessibility ) { public void ondrawerclosed(view view) { getactionbar().settitle(mtitle); // calling onprepareoptionsmenu() show action bar icons invalidateoptionsmenu(); //getactionbar().show(); } public void ondraweropened(view drawerview) { getactionbar().settitle(mdrawertitle); // calling onprepareoptionsmenu() hide action bar icons invalidateoptionsmenu(); //getactionbar().hide(); } }; mdrawerlayout.setdrawerlistener(mdrawertoggle); if (savedinstancestate == null) { // on first time display view first nav item displayview(0); } } /** * slide menu item click listener * */ private class slidemenuclicklistener implements listview.onitemclicklistener { @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { // display view selected nav drawer item displayview(position); } } @override public boolean oncreateoptionsmenu(menu menu) { getmenuinflater().inflate(r.menu.main, menu); return true; } @override public boolean onoptionsitemselected(menuitem item) { // toggle nav drawer on selecting action bar app icon/title if (mdrawertoggle.onoptionsitemselected(item)) { return true; } else if(mdrawerlayout.isdraweropen(mdrawerlist) && onoptionsitemselected(item)){ return true; } // handle action bar actions click switch (item.getitemid()) { case r.id.action_settings: return true; default: return super.onoptionsitemselected(item); } } /*** * called when invalidateoptionsmenu() triggered */ @override public boolean onprepareoptionsmenu(menu menu) { // if nav drawer opened, hide action items boolean draweropen = mdrawerlayout.isdraweropen(mdrawerlist); menu.finditem(r.id.action_settings).setvisible(!draweropen); hidemenuitems(menu, !draweropen); return super.onprepareoptionsmenu(menu); } private void hidemenuitems(menu menu, boolean visible){ for(int =0; i< menu.size(); i++){ menu.getitem(i).setvisible(visible); } } /** * diplaying fragment view selected nav drawer list item * */ private void displayview(int position) { // update main content replacing fragments fragment fragment = null; switch (position) { case 0: fragment = new homefragment(); break; case 1: fragment = new berichtenfragment(); break; case 2: //fragment = new phonefragment(); intent call = new intent(intent.action_dial, uri.parse("tel:" + "+31882002555")); startactivity(call); mdrawerlayout.closedrawer(mdrawerlist); break; case 3: fragment = new aboutfragment(); break; case 4: fragment = new settingsfragment(); break; default: break; } if (fragment != null) { fragmentmanager fragmentmanager = getfragmentmanager(); fragmentmanager.begintransaction() .replace(r.id.frame_container, fragment).commit(); // update selected item , title, close drawer mdrawerlist.setitemchecked(position, true); mdrawerlist.setselection(position); settitle(navmenutitles[position]); mdrawerlayout.closedrawer(mdrawerlist); } else { // error in creating fragment log.e("mainactivity", "error in creating fragment"); } } @override public void settitle(charsequence title) { mtitle = title; getactionbar().settitle(mtitle); } /** * when using actionbardrawertoggle, must call during * onpostcreate() , onconfigurationchanged()... */ @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); // pass configuration change drawer toggls mdrawertoggle.onconfigurationchanged(newconfig); } @override public boolean onkeydown(int keycode, keyevent e) { if (keycode == keyevent.keycode_menu) { // action... if (!mdrawerlayout.isdraweropen(mdrawerlist)) { mdrawerlayout.opendrawer(mdrawerlist); } else{ mdrawerlayout.closedrawer(mdrawerlist); } return true; } return super.onkeydown(keycode, e); } }
the codes below related menudrawer:
the code below navdrawerlistadapter.java:
package nl.vitaminen.solay.adapter; import nl.vitaminen.solay.r; import nl.vitaminen.solay.model.navdraweritem; import java.util.arraylist; //import nl.vitaminen.solay.r.id; //import nl.vitaminen.solay.r.layout; import android.app.activity; import android.content.context; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.baseadapter; import android.widget.imageview; import android.widget.textview; public class navdrawerlistadapter extends baseadapter { private context context; private arraylist<navdraweritem> navdraweritems; public navdrawerlistadapter(context context, arraylist<navdraweritem> navdraweritems){ this.context = context; this.navdraweritems = navdraweritems; } @override public int getcount() { return navdraweritems.size(); } @override public object getitem(int position) { return navdraweritems.get(position); } @override public long getitemid(int position) { return position; } @override public view getview(int position, view convertview, viewgroup parent) { if (convertview == null) { layoutinflater minflater = (layoutinflater) context.getsystemservice(activity.layout_inflater_service); convertview = minflater.inflate(r.layout.drawer_list_item, null); } imageview imgicon = (imageview) convertview.findviewbyid(r.id.icon); textview txttitle = (textview) convertview.findviewbyid(r.id.title); textview txtcount = (textview) convertview.findviewbyid(r.id.counter); imgicon.setimageresource(navdraweritems.get(position).geticon()); txttitle.settext(navdraweritems.get(position).gettitle()); // displaying count // check whether set visible or not if(navdraweritems.get(position).getcountervisibility()){ txtcount.settext(navdraweritems.get(position).getcount()); }else{ // hide counter view txtcount.setvisibility(view.gone); } return convertview; } }
i know xml , java files below not important, because list items , not whole menu. reason place maybe need it, resolve problem.
--
the code below navdraweritem.java :
package nl.vitaminen.solay.model; public class navdraweritem { private string title; private int icon; private string count = "0"; // boolean set visiblity of counter private boolean iscountervisible = false; public navdraweritem(){} public navdraweritem(string title, int icon){ this.title = title; this.icon = icon; } public navdraweritem(string title, int icon, boolean iscountervisible, string count){ this.title = title; this.icon = icon; this.iscountervisible = iscountervisible; this.count = count; } public string gettitle(){ return this.title; } public int geticon(){ return this.icon; } public string getcount(){ return this.count; } public boolean getcountervisibility(){ return this.iscountervisible; } public void settitle(string title){ this.title = title; } public void seticon(int icon){ this.icon = icon; } public void setcount(string count){ this.count = count; } public void setcountervisibility(boolean iscountervisible){ this.iscountervisible = iscountervisible; } }
and final code below related navdrawerlistadapter.java:
<?xml version="1.0" encoding="utf-8"?> <relativelayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="48dp" android:background="@drawable/list_selector"> <imageview android:id="@+id/icon" android:layout_width="25dp" android:layout_height="wrap_content" android:layout_alignparentleft="true" android:layout_marginleft="12dp" android:layout_marginright="12dp" android:contentdescription="@string/desc_list_item_icon" android:src="@drawable/ic_home" android:layout_centervertical="true" /> <textview android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_torightof="@id/icon" android:minheight="?android:attr/listpreferreditemheightsmall" android:textappearance="?android:attr/textappearancelistitemsmall" android:textcolor="@color/list_item_title" android:gravity="center_vertical" android:paddingright="40dp"/> <textview android:id="@+id/counter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@drawable/counter_bg" android:layout_alignparentright="true" android:layout_centervertical="true" android:layout_marginright="8dp" android:textcolor="@color/counter_text_color"/> </relativelayout>
thank taking time resolve problem. hope enough information you.
finally solved problem, changed in activity_main.xml background of listview follows:
<android.support.v4.widget.drawerlayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <!-- framelayout display fragments --> <framelayout android:id="@+id/frame_container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- listview display slider menu --> <listview android:id="@+id/list_slidermenu" android:layout_width="240dp" android:layout_height="match_parent" android:layout_gravity="start" android:choicemode="singlechoice" android:divider="@color/black_overlay" android:dividerheight="1dp" android:listselector="@drawable/list_selector" android:background="@drawable/navigation_image_below"/> <!-- line changed --> <imageview android:contentdescription="@string/app_name" android:background="@drawable/solaylogo" android:maxwidth="30dp" android:maxheight="10dp"/> </android.support.v4.widget.drawerlayout>
the image below navigation_image_below.png
i hope solution problem. not, because if screen resolution more or less image stretched.
i appreciate if has solution.
Comments
Post a Comment