我可以在导航抽屉布局添加图像头 [英] can I add an image header in navigation drawer layout

查看:300
本文介绍了我可以在导航抽屉布局添加图像头的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何可以将图像头添加到我的抽屉式导航栏的布局像这样的

这是我的code: MainActivity.java

 包com.webileapps.navdrawer;

进口android.app.AlarmManager;
进口android.app.AlertDialog;
进口android.app.PendingIntent;
进口android.content.Context;
进口android.content.DialogInterface;
进口android.content.res.Configuration;
进口android.graphics.drawable.Drawable;
进口android.os.Bundle;
进口android.support.v4.app.ActionBarDrawerToggle;
进口android.support.v4.app.Fragment;
进口android.support.v4.view.GravityCompat;
进口android.support.v4.widget.DrawerLayout;
进口android.text.InputType;
进口android.view.View;
进口android.widget.EditText;
进口android.widget.ExpandableListView;
进口android.widget.ImageView;


进口com.actionbarsherlock.app.SherlockFragmentActivity;
进口com.webileapps.navdrawer.House_Fragment.Garage_Fragment;
进口com.webileapps.navdrawer.House_Fragment.Hall_Fragment;
进口com.webileapps.navdrawer.House_Fragment.Kitchen_Fragment;
进口com.webileapps.navdrawer.menu.Settings.Account preference;
进口com.webileapps.navdrawer.menu.Settings.DialogChangeAccount;
进口com.webileapps.navdrawer.menu.Settings.DialogChangeCity;
进口com.webileapps.navdrawer.menu.Settings.DialogSettingsApp;
进口com.webileapps.navdrawer.menu.Settings.DialogSupport;
进口com.webileapps.navdrawer.menu.Settings.City preference;
进口com.webileapps.navdrawer.menu.Settings.DialogueConnexion;

进口的java.util.ArrayList;
进口的java.util.Calendar;
进口的java.util.HashMap;
进口的java.util.List;


公共类MainActivity扩展SherlockFragmentActivity
     实现DialogChangeCity.dialogDoneListenerCity,
    DialogChangeAccount.dialogDoneListenerAccount,
    DialogSettingsApp.dialogDoneListenerSett,
    DialogSupport.dialogDoneListenerSupp,
            DialogueConnexion.dialogDoneListenerConn {
DrawerLayout mDrawerLayout;
DrawerLayout mDrawerLayoutR;
ExpandableListView mDrawerList;
ExpandableListView mDrawerListR;
ActionBarDrawerToggle mDrawerToggle;
ActionBarDrawerToggle mDrawerToggleR​​;

私人的CharSequence mDrawerTitle;
私人的CharSequence mDrawerTitleR;
私人的CharSequence mTitle;
私人的CharSequence mTitleR;
名单<型号:GT; listDataHeader;
名单<型号:GT; listDataHeaderR;
HashMap的<型号,列表和LT;型​​号:GT;> listDataChild;
ExpandableListAdapter listAdapter;
ExpandableListAdapter listAdapterR;



@覆盖
保护无效的onCreate(包savedInstanceState){
    super.onCreate(savedInstanceState);
    的setContentView(R.layout.activity_main);

    mTitle = mDrawerTitle =的getTitle();
    mTitleR = mDrawerTitleR =的getTitle();

    mDrawerLayout =(DrawerLayout)findViewById(R.id.drawer_layout);

    mDrawerList =(ExpandableListView)findViewById(R.id.left_drawer);
    mDrawerListR =(ExpandableListView)findViewById(R.id.right_drawer);

    prepareListData();
    prepareListDataRight();
    //设置自定义影子覆盖
                  抽屉打开时的主要内容
    listAdapter =新ExpandableListAdapter(这一点,
                 listDataHeader,listDataChild);
    listAdapterR =新ExpandableListAdapter(这一点,listDataHeaderR,NULL);
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);
   // mDrawerLayout.setDrawerShadow(R.drawable.up_24,GravityCompat.END);
    //设置抽屉的列表视图项,然后单击监听器
   / * mDrawerList.setAdapter(新ArrayAdapter<字符串>(这一点,
            R.layout.drawer_list_item,mRoomTitles)); * /
    mDrawerList.setAdapter(listAdapter);
    mDrawerListR.setAdapter(listAdapterR);
    //mDrawerList.setOnItemClickListener(
                           新DrawerItemClickListener());
    mDrawerListR.setOnGroupClickListener(新ExpandableListView。
                             OnGroupClickListener(){
        @覆盖
        公共布尔onGroupClick(ExpandableListView扩展
                           列表显示,
                  视图中查看,INT I,长L){
            开关(ⅰ){
                情况下0:
                    DialogSettingsApp dialogSettingsApp =
                                     新DialogSettingsApp();
                    dialogSettingsApp。
                       秀(getFragmentManager(),diagSett);
                    打破;
                情况1:
                    DialogChangeAccount dialogChangeAccount =
                               新DialogChangeAccount();
                    dialogChangeAccount。
                            秀(getFragmentManager(),diagA);
                    打破;
                案例2:
                    DialogChangeCity dialogChangeCity =
                        新DialogChangeCity();
                    dialogChangeCity.show(getFragmentManager(),diagC);
                    打破;
                案例3:
                    DialogSupport dialogSupport =新DialogSupport();
                    dialogSupport.show(getFragmentManager(),diagSupp);
                    打破;
                壳体4:
                    DialogueConnexion dialogueConnexion =
                                  新DialogueConnexion();
                    dialogueConnexion。
              秀(getFragmentManager(),diagConn);
                    打破;
            }
            返回false;
        }
    });
    mDrawerList.setOnGroupClickListener(新ExpandableListView。
                               OnGroupClickListener(){

        @覆盖
        公共布尔onGroupClick(ExpandableListView父,视图V,
                                    INT groupPosition,长ID){
            片段FRG = NULL;
            开关(groupPosition){
                情况下0:
                    getSupportFragmentManager()
                            .beginTransaction()
        。新增(R.id.content,PageSlidingHomeFragment.newInstance()
                   ,PageSlidingHomeFragment.TAG).commit();
                    mDrawerList.setItemChecked(groupPosition,真正的);
                    mDrawerList.setSelection(groupPosition);
                    mDrawerLayout.closeDrawer(mDrawerList);

                    打破;
                情况1:

                    打破;
                案例2:
                    FRG =新Kitchen_Fragment();
                    打破;
                案例3:
                    FRG =新Garage_Fragment();
                    打破;
                壳体4:
                    FRG =新Hall_Fragment();
                    打破;
            }
            如果(FRG!= NULL){
                getSupportFragmentManager()的BeginTransaction()
                        .replace(R.id.content,FRG).commit();

                //更新所选项目和标题,然后关上抽屉
                mDrawerList.setItemChecked(groupPosition,真正的);
                mDrawerList.setSelection(groupPosition);
                mDrawerLayout.closeDrawer(mDrawerList);
            }
            返回false;
        }
    });
    //使动作条的应用程序图标,表现为动作切换导航抽屉
    getSupportActionBar()setDisplayHomeAsUpEnabled(真)。
    getSupportActionBar()setHomeButtonEnabled(真)。

    // ActionBarDrawerToggle联系在一起的适当交互
    //滑动抽屉和操作栏中的应用程序图标之间
    mDrawerToggleR​​ =新ActionBarDrawerToggle(这一点,
            mDrawerLayout,
            R.drawable.down_24,
            R.string.drawer_open,
            R.string.drawer_close
    ){
        公共无效onDrawerClosed(查看视图){
            。getSupportActionBar()的setTitle(mTitle);
            invalidateOptionsMenu(); //创建调用
            //在prepareOptionsMenu()
        }

        公共无效onDrawerOpened(查看drawerView){
            。getSupportActionBar()的setTitle(mDrawerTitleR);
            invalidateOptionsMenu(); //创建调用
            //在prepareOptionsMenu()
        }
    };
    mDrawerToggle =新ActionBarDrawerToggle(这一点,/ *主机活动* /
            mDrawerLayout,/ * DrawerLayout对象* /
            R.drawable.ic_drawer,/ *
                         导航抽屉图像,以取代上插入符* /
            R.string.drawer_open,/ *
                         开放抽屉说明访问* /
            R.string.drawer_close / *
                        关闭的抽屉说明访问* /

    ){
        公共无效onDrawerClosed(查看视图){
            。getSupportActionBar()的setTitle(mTitle);
            invalidateOptionsMenu(); //创建调用
            //在prepareOptionsMenu()
        }

        公共无效onDrawerOpened(查看drawerView){
            。getSupportActionBar()的setTitle(mDrawerTitle);
            invalidateOptionsMenu(); //创建调用
            //在prepareOptionsMenu()
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerLayout.setDrawerListener(mDrawerToggleR​​);

    如果(savedInstanceState == NULL){
        选择信息(0);
    }

}


@覆盖
公共布尔onCreateOptionsMenu(com.actionbarsherlock.view.Menu菜单){
    com.actionbarsherlock.view.MenuInflater
                   充气= getSupportMenuInflater();
    inflater.inflate(R.menu.main,菜单);

    返回super.onCreateOptionsMenu(菜单);
}

@覆盖
公共布尔onOptionsItemSelected(
        com.actionbarsherlock.view.MenuItem项){

    开关(item.getItemId()){

        案例android.R.id.home:{
            mDrawerLayout.closeDrawer(mDrawerListR);
            如果(mDrawerLayout.isDrawerOpen(mDrawerList)){
                mDrawerLayout.closeDrawer(mDrawerList);
            } 其他 {
                mDrawerLayout.openDrawer(mDrawerList);
            }
            打破;
        }
        案例R.id.action_contact:{
            mDrawerLayout.closeDrawer(mDrawerList);
            如果(mDrawerLayout.isDrawerOpen(mDrawerListR)){
                mDrawerLayout.closeDrawer(mDrawerListR);
            } 其他 {
                mDrawerLayout.openDrawer(mDrawerListR);

            }
            打破;
        }
    }

    返回super.onOptionsItemSelected(项目);
}

公共无效showInputDialog(){
    AlertDialog.Builder建设者=新AlertDialog.Builder(本);
    builder.setTitle(切换城市);
    最后的EditText输入=新的EditText(本);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(输入);
    builder.setPositiveButton(去,新
              DialogInterface.OnClickListener(){
        @覆盖
        公共无效的onClick(DialogInterface对话,诠释它){
            changeCity(input.getText()的toString());
        }
    });
    builder.show();
}

公共无效changeCity(字符串市){
    新城区preference(本).setCity(市);
}

//导航抽屉的点击侦听器的ListView
/ *私有类DrawerItemClickListener工具
        ListView.OnItemClickListener {
    @覆盖
    公共无效onItemClick(适配器视图<>父,查看查看
                      ,INT位置,长的id){
        选择信息(位置);
    }
}
* /

@覆盖
保护无效onPostCreate(包savedInstanceState){
    super.onPostCreate(savedInstanceState);
    //同步发生onRestoreInstanceState后切换状态。
    mDrawerToggle.syncState();
}

@覆盖
公共无效onConfigurationChanged(配置NEWCONFIG){
    super.onConfigurationChanged(NEWCONFIG);
    //传递任何配置更改抽屉切换
    mDrawerToggle.onConfigurationChanged(NEWCONFIG);
}

私人无效选择信息(INT位置){
    开关(位置){
        情况下0:
            getSupportFragmentManager()
                    .beginTransaction()
                    。新增(R.id.content,
                            PageSlidingHomeFragment.newInstance(),
                            PageSlidingHomeFragment.TAG).commit();
            打破;
    }
    //更新所选项目和标题,然后关上抽屉
    mDrawerList.setItemChecked(位置,真正的);
    mDrawerList.setSelection(位置);
    mDrawerLayout.closeDrawer(mDrawerList);
}

私人无效prepareListDataRight(){
    listDataHeaderR =新的ArrayList<型号>();

    listDataHeaderR.add(新模型(R.drawable.settings_24,
    应用程序设置));
    listDataHeaderR.add(新模型(R.drawable.edit_user_24,
    更新账户));
    listDataHeaderR.add(新模型(R.drawable.edit_24,切换城市));
    listDataHeaderR.add(新模型(R.drawable.quest_24,支持));
    listDataHeaderR.add(新模型(R.drawable。
  ic_action_user,断开));
}
私人无效prepareListData(){
    listDataHeader =新的ArrayList<型号>();
    listDataChild =新的HashMap<型号,列表和LT;型​​号:GT;>();

    //添加子数据
    listDataHeader.add(新模型(R.drawable.home24,家));
    listDataHeader.add(新模型(房间));
    listDataHeader.add(新模型(R.drawable.kitchen_24,厨房));
    listDataHeader.add(新模型(R.drawable.garage_24,车库));
    listDataHeader.add(新模型(R.drawable.room_24,霍尔));

    //添加子数据
    名单<型号:GT;家庭=新的ArrayList<型号>();
    home.add(新模型(R.drawable.settings_24,设置));
    home.add(新模型(R.drawable.devices_24,设备));
    home.add(新模型(R.drawable.weather_24,天气));
    名单<型号:GT;客房=新的ArrayList<型号>();
    rooms.add(新模型(R.drawable.bed_c_24,1SR儿童房));
    rooms.add(新模型(R.drawable.bed_c_24,2SD儿童房));
    rooms.add(新模型(R.drawable.bedroom_24,父母房));
    rooms.add(新模型(R.drawable.hotel_24,客人房));
    rooms.add(新模型(R.drawable.dining_room_24,餐厅));
    rooms.add(新模型(R.drawable.livingroom_24,客厅));
    rooms.add(新模型(R.drawable.office_24,办公室));
    rooms.add(新模型(R.drawable.bathroom_24,浴室一楼));
    rooms.add(新模型(R.drawable.bathroom_24,浴室二楼));


    //头,子数据

    listDataChild.put(listDataHeader.get(1),客房);


}


@覆盖
公共无效onDone(字符串文本,布尔州){

    如果(州){
        changeCity(文本);
        //this.recreate();
        restartSelf();
    }
}

私人无效restartSelf(){
  AlarmManager AM =(AlarmManager)gettSystemService(上下文。
  ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP,Calendar.getInstance()
 .getTimeInMillis()
 + 1000,//1秒
            PendingIntent.getActivity(此,0,getIntent(),
PendingIntent.FLAG_ONE_SHOT
                    | PendingIntent.FLAG_CANCEL_CURRENT));
    完();
}

@覆盖
公共无效onDoneA(字符串登录,字符串opwd,字符串npwd){
    如果(登录=!&放大器;&安培; opwd =!&放大器;&安培; npwd =!){
        changeAccount(登录,opwd,npwd);
    }
}

私人无效changeAccount(字符串登录,字符串opwd,字符串npwd){
    新账户preference(本).setAccountL(登录);
    新账户preference(本).setAccountOP(opwd);
    新账户preference(本).setAccountNP(npwd);
}

@覆盖
公共无效onDone(){
    INT X = 0;
}
}
 

activity_main.xml

 < android.support.v4.widget.DrawerLayout的xmlns:机器人=HTTP://模式
     .android.com / APK / RES /安卓
机器人:ID =@ + ID / drawer_layout
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT>

< RelativeLayout的
    的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:程序=htt​​p://schemas.android.com/apk/res-auto
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s
    机器人:layout_width =match_parent机器人:ID =@ + ID /内容
    机器人:layout_height =match_parent>
< / RelativeLayout的>

<! - 导航抽屉 - >

< ExpandableListView
    机器人:ID =@ + ID / left_drawer
    机器人:layout_width =300dp
    机器人:layout_height =match_parent
    机器人:layout_gravity =开始
    机器人:后台=#000
    机器人:choiceMode =singleChoice
    机器人:分隔=@色/ abs__bright_foreground_disabled_holo_dark
    机器人:dividerHeight =2DP/>
< ExpandableListView
    机器人:ID =@ + ID / right_drawer
    机器人:layout_width =200dp
    机器人:layout_height =300dp
    机器人:layout_gravity =结束
    机器人:后台=#000
    机器人:choiceMode =singleChoice
    机器人:分隔=@色/ abs__bright_foreground_disabled_holo_dark
    机器人:dividerHeight =2DP/>

    < /android.support.v4.widget.DrawerLayout>
 

ExpandableListAdapter.java

 包com.webileapps.navdrawer;

进口的java.util.HashMap;
进口的java.util.List;

进口android.content.Context;
进口android.graphics.Typeface;
进口android.view.LayoutInflater;
进口android.view.View;
进口android.view.ViewGroup;
进口android.widget.BaseExpandableListAdapter;
进口android.widget.ImageView;
进口android.widget.TextView;

公共类ExpandableListAdapter扩展BaseExpandableListAdapter {

私人语境_context;
私人列表<型号:GT; _listDataHeader; //标题标题
//子数据的标题标题格式,子标题
私人的HashMap<型号,列表和LT;型​​号:GT;> _listDataChild;

公共ExpandableListAdapter(上下文的背景下,名单,其中,模型与GT; listDataHeader,
                             HashMap的<型号,列表和LT;型​​号:GT;> listChildData){
    this._context =背景;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@覆盖
公共对象getChild(INT groupPosition,诠释childPosititon){
    返回this._listDataChild.get(这一点。
   _listDataHeader.get(groupPosition))得到(childPosititon)。
}

@覆盖
众长getChildId(INT groupPosition,诠释childPosition){
    返回childPosition;
}

@覆盖
公共查看getChildView(INT groupPosition,最终诠释childPosition,
         布尔isLastChild,查看convertView,ViewGroup中父){

 最终模型childText =(模型)getChild(groupPosition,childPosition);

    如果(convertView == NULL){
        LayoutInflater infalInflater =(LayoutInflater)this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item,NULL);
    }

    TextView的txtListChild =(TextView中)convertView
            .findViewById(R.id.lblListItem);
    ImageView的IconListChild =(ImageView的)convertView.findViewById
                  (R.id.item_icon_child);
    IconListChild.setImageResource(childText.getIcon());
    txtListChild.setText(childText.getTitle());
    返回convertView;
}

@覆盖
公众诠释getChildrenCount(INT groupPosition){
    INT I = 0;
    开关(groupPosition){
        情况1:
        I = this._listDataChild.get
  (this._listDataHeader.get(groupPosition))的大小()。
            打破;
        默认:
            I = 0;
            打破;
    }
    返回我;
}

@覆盖
众模特getGroup(INT groupPosition){
    返回this._listDataHeader.get(groupPosition);
}

@覆盖
公众诠释getGroupCount(){
    返回this._listDataHeader.size();
}

@覆盖
众长getGroupId(INT groupPosition){
    返回groupPosition;
}

@覆盖
公共查看getGroupView(INT groupPosition,布尔isExpanded,
                         查看convertView,ViewGroup中父){
    型号headerTitle =(模型)getGroup(groupPosition);
    如果(convertView == NULL){
        LayoutInflater infalInflater =(LayoutInflater)this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group,NULL);
    }

    TextView的lblListHeader =(TextView中)convertView
            .findViewById(R.id.lblListHeader);
    ImageView的IconListHeader =(ImageView的)convertView.findViewById
           (R.id.item_icon_group);
    IconListHeader.setImageResource(headerTitle.getIcon());
    lblListHeader.setTypeface(NULL,Typeface.BOLD);
    lblListHeader.setText(headerTitle.getTitle());

    返回convertView;
}

@覆盖
公共布尔hasStableIds(){
    返回false;
}

@覆盖
公共布尔isChildSelectable(INT groupPosition,诠释childPosition){
    返回true;
}

 }
 

解决方案

在导航抽屉布局的XML文件。以上drawerView和您的父母布局中添加图像视图,如下所示:

 < ImageView的
        机器人:ID =@ + ID /图像
        机器人:layout_width =280dp
        机器人:layout_height =140dp
        机器人:SRC =respective_source_of_image/>
 

此应该足够了。希望这有助于。

使用回收站视图创建一个抽屉式导航。回收站视图用于现在最。在你的抽屉式导航栏片段有你的布局文件,如下图所示。这能让你实现你的目标:

 < RelativeLayout的的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android
    的xmlns:工具=htt​​p://schemas.android.com/tool​​s

    机器人:layout_width =match_parent
    机器人:layout_height =match_parent

    工具:上下文=com.ms.t.tms.NavigationDrawerFragment>


    < ImageView的
        机器人:ID =@ + ID /图像
        机器人:layout_width =280dp
        机器人:layout_height =140dp
        机器人:SRC =respective_image_src/>


    < android.support.v7.widget.RecyclerView
        机器人:ID =@ + ID / drawerView
        机器人:layout_width =match_parent
        机器人:layout_height =match_parent
        机器人:layout_below =@ + ID /图像

        机器人:背景=@色/ colorPrimary>< /android.support.v7.widget.RecyclerView>


< / RelativeLayout的>
 

how can i add an image header to my navigation drawer layout like this one

and this is my code : MainActivity.java

package com.webileapps.navdrawer;

import android.app.AlarmManager;
import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.Fragment;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.text.InputType;
import android.view.View;
import android.widget.EditText;
import android.widget.ExpandableListView;
import android.widget.ImageView;


import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.webileapps.navdrawer.House_Fragment.Garage_Fragment;
import com.webileapps.navdrawer.House_Fragment.Hall_Fragment;
import com.webileapps.navdrawer.House_Fragment.Kitchen_Fragment;
import com.webileapps.navdrawer.menu.Settings.AccountPreference;
import com.webileapps.navdrawer.menu.Settings.DialogChangeAccount;
import com.webileapps.navdrawer.menu.Settings.DialogChangeCity;
import com.webileapps.navdrawer.menu.Settings.DialogSettingsApp;
import com.webileapps.navdrawer.menu.Settings.DialogSupport;
import com.webileapps.navdrawer.menu.Settings.CityPreference;
import com.webileapps.navdrawer.menu.Settings.DialogueConnexion;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;


public class MainActivity extends SherlockFragmentActivity 
     implements         DialogChangeCity.dialogDoneListenerCity,
    DialogChangeAccount.dialogDoneListenerAccount,
    DialogSettingsApp.dialogDoneListenerSett,
    DialogSupport.dialogDoneListenerSupp,
            DialogueConnexion.dialogDoneListenerConn {
DrawerLayout mDrawerLayout;
DrawerLayout mDrawerLayoutR;
ExpandableListView mDrawerList;
ExpandableListView mDrawerListR;
ActionBarDrawerToggle mDrawerToggle;
ActionBarDrawerToggle mDrawerToggleR;

private CharSequence mDrawerTitle;
private CharSequence mDrawerTitleR;
private CharSequence mTitle;
private CharSequence mTitleR;
List<Model> listDataHeader;
List<Model> listDataHeaderR;
HashMap<Model, List<Model>> listDataChild;
ExpandableListAdapter listAdapter;
ExpandableListAdapter listAdapterR;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTitle = mDrawerTitle = getTitle();
    mTitleR = mDrawerTitleR = getTitle();

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    mDrawerList = (ExpandableListView) findViewById(R.id.left_drawer);
    mDrawerListR = (ExpandableListView) findViewById(R.id.right_drawer);

    prepareListData();
    prepareListDataRight();
    // set a custom shadow that overlays 
                  the main content when the drawer opens
    listAdapter = new ExpandableListAdapter(this, 
                 listDataHeader, listDataChild);
    listAdapterR = new ExpandableListAdapter(this, listDataHeaderR,null);
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);
   // mDrawerLayout.setDrawerShadow(R.drawable.up_24,GravityCompat.END);
    // set up the drawer's list view with items and click listener
   /* mDrawerList.setAdapter(new ArrayAdapter<String>(this,
            R.layout.drawer_list_item, mRoomTitles));*/
    mDrawerList.setAdapter(listAdapter);
    mDrawerListR.setAdapter(listAdapterR);
    //mDrawerList.setOnItemClickListener(
                           new DrawerItemClickListener());
    mDrawerListR.setOnGroupClickListener(new ExpandableListView.
                             OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView  expandable
                           ListView, 
                  View view, int i, long l) {
            switch(i){
                case 0:
                    DialogSettingsApp dialogSettingsApp =
                                     new DialogSettingsApp();
                    dialogSettingsApp.
                       show(getFragmentManager(),"diagSett");
                    break;
                case 1:
                    DialogChangeAccount dialogChangeAccount =
                               new DialogChangeAccount();
                    dialogChangeAccount.
                            show(getFragmentManager(),"diagA");
                    break;
                case 2:
                    DialogChangeCity dialogChangeCity = 
                        new DialogChangeCity();
                    dialogChangeCity.show(getFragmentManager(),"diagC");
                    break;
                case 3:
                    DialogSupport dialogSupport = new DialogSupport();
                    dialogSupport.show(getFragmentManager(),"diagSupp");
                    break;
                case 4:
                    DialogueConnexion dialogueConnexion =
                                  new DialogueConnexion();
                    dialogueConnexion.
              show(getFragmentManager(),"diagConn");
                    break;
            }
            return false;
        }
    });
    mDrawerList.setOnGroupClickListener(new ExpandableListView.
                               OnGroupClickListener() {

        @Override
        public boolean onGroupClick(ExpandableListView parent, View v,
                                    int groupPosition, long id) {
            Fragment frg = null;
            switch (groupPosition) {
                case 0:
                    getSupportFragmentManager()
                            .beginTransaction()
        .add(R.id.content, PageSlidingHomeFragment.newInstance()
                   , PageSlidingHomeFragment.TAG).commit();
                    mDrawerList.setItemChecked(groupPosition, true);
                    mDrawerList.setSelection(groupPosition);
                    mDrawerLayout.closeDrawer(mDrawerList);

                    break;
                case 1:

                    break;
                case 2:
                    frg = new Kitchen_Fragment();
                    break;
                case 3:
                    frg = new Garage_Fragment();
                    break;
                case 4:
                    frg = new Hall_Fragment();
                    break;
            }
            if (frg != null) {
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.content, frg).commit();

                // update selected item and title, then close the drawer
                mDrawerList.setItemChecked(groupPosition, true);
                mDrawerList.setSelection(groupPosition);
                mDrawerLayout.closeDrawer(mDrawerList);
            }
            return false;
        }
    });
    // enable ActionBar app icon to behave as action to toggle nav drawer
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    // ActionBarDrawerToggle ties together the the proper interactions
    // between the sliding drawer and the action bar app icon
    mDrawerToggleR=new ActionBarDrawerToggle(this,
            mDrawerLayout,
            R.drawable.down_24,
            R.string.drawer_open,
            R.string.drawer_close
    ){
        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to
            // onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(mDrawerTitleR);
            invalidateOptionsMenu(); // creates call to
            // onPrepareOptionsMenu()
        }
    };
    mDrawerToggle = new ActionBarDrawerToggle(this, /* host Activity */
            mDrawerLayout, /* DrawerLayout object */
            R.drawable.ic_drawer, /*
                         nav drawer image to replace 'Up' caret */
            R.string.drawer_open, /* 
                         "open drawer" description for accessibility */
            R.string.drawer_close /* 
                        "close drawer" description for accessibility */

    ) {
        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            invalidateOptionsMenu(); // creates call to
            // onPrepareOptionsMenu()
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(mDrawerTitle);
            invalidateOptionsMenu(); // creates call to
            // onPrepareOptionsMenu()
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);
    mDrawerLayout.setDrawerListener(mDrawerToggleR);

    if (savedInstanceState == null) {
        selectItem(0);
    }

}


@Override
public boolean onCreateOptionsMenu(com.actionbarsherlock.view.Menu menu){
    com.actionbarsherlock.view.MenuInflater 
                   inflater = getSupportMenuInflater();
    inflater.inflate(R.menu.main, menu);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(
        com.actionbarsherlock.view.MenuItem item) {

    switch (item.getItemId()) {

        case android.R.id.home: {
            mDrawerLayout.closeDrawer(mDrawerListR);
            if (mDrawerLayout.isDrawerOpen(mDrawerList)) {
                mDrawerLayout.closeDrawer(mDrawerList);
            } else {
                mDrawerLayout.openDrawer(mDrawerList);
            }
            break;
        }
        case R.id.action_contact:{
            mDrawerLayout.closeDrawer(mDrawerList);
            if (mDrawerLayout.isDrawerOpen(mDrawerListR)) {
                mDrawerLayout.closeDrawer(mDrawerListR);
            } else {
                mDrawerLayout.openDrawer(mDrawerListR);

            }
            break;
        }
    }

    return super.onOptionsItemSelected(item);
}

public void showInputDialog() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle("Change city");
    final EditText input = new EditText(this);
    input.setInputType(InputType.TYPE_CLASS_TEXT);
    builder.setView(input);
    builder.setPositiveButton("Go", new 
              DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            changeCity(input.getText().toString());
        }
    });
    builder.show();
}

public void changeCity(String city) {
    new CityPreference(this).setCity(city);
}

// The click listener for ListView in the navigation drawer
/*private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view
                      , int   position,long id) {
        selectItem(position);
    }
}
*/

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggles
    mDrawerToggle.onConfigurationChanged(newConfig);
}

private void selectItem(int position) {
    switch (position) {
        case 0:
            getSupportFragmentManager()
                    .beginTransaction()
                    .add(R.id.content,
                            PageSlidingHomeFragment.newInstance(),
                            PageSlidingHomeFragment.TAG).commit();
            break;
    }
    // update selected item and title, then close the drawer
    mDrawerList.setItemChecked(position, true);
    mDrawerList.setSelection(position);
    mDrawerLayout.closeDrawer(mDrawerList);
}

private void prepareListDataRight(){
    listDataHeaderR = new ArrayList<Model>();

    listDataHeaderR.add(new Model(R.drawable.settings_24,
    "App Settings"));
    listDataHeaderR.add(new Model(R.drawable.edit_user_24,
    "Update Account"));
    listDataHeaderR.add(new Model(R.drawable.edit_24, "Change City"));
    listDataHeaderR.add(new Model(R.drawable.quest_24, "Support"));
    listDataHeaderR.add(new Model(R.drawable.
  ic_action_user,    "Disconnection"));
}
private void prepareListData() {
    listDataHeader = new ArrayList<Model>();
    listDataChild = new HashMap<Model, List<Model>>();

    // Adding child data
    listDataHeader.add(new Model(R.drawable.home24, "Home"));
    listDataHeader.add(new Model("Rooms"));
    listDataHeader.add(new Model(R.drawable.kitchen_24, "Kitchen"));
    listDataHeader.add(new Model(R.drawable.garage_24, "Garage"));
    listDataHeader.add(new Model(R.drawable.room_24, "Hall"));

    // Adding child data
    List<Model> home = new ArrayList<Model>();
    home.add(new Model(R.drawable.settings_24, "Settings"));
    home.add(new Model(R.drawable.devices_24, "Devices"));
    home.add(new Model(R.drawable.weather_24, "Weather"));
    List<Model> rooms = new ArrayList<Model>();
    rooms.add(new Model(R.drawable.bed_c_24, "1sr Child room"));
    rooms.add(new Model(R.drawable.bed_c_24, "2sd Child room"));
    rooms.add(new Model(R.drawable.bedroom_24, "Parents room"));
    rooms.add(new Model(R.drawable.hotel_24, "Guests room"));
    rooms.add(new Model(R.drawable.dining_room_24, "Dining room"));
    rooms.add(new Model(R.drawable.livingroom_24, "Living room"));
    rooms.add(new Model(R.drawable.office_24, "Office"));
    rooms.add(new Model(R.drawable.bathroom_24, "Bathroom 1st floor"));
    rooms.add(new Model(R.drawable.bathroom_24, "Bathroom 2nd floor"));


    // Header, Child data

    listDataChild.put(listDataHeader.get(1), rooms);


}


@Override
public void onDone(String text, boolean state) {

    if (state) {
        changeCity(text);
        //this.recreate();
        restartSelf();
    }
}

private void restartSelf() {
  AlarmManager am = (AlarmManager)  gettSystemService(Context.
  ALARM_SERVICE);
    am.set(AlarmManager.RTC_WAKEUP,Calendar.getInstance()
 .getTimeInMillis() 
 + 1000, // one second
            PendingIntent.getActivity(this, 0, getIntent(),
PendingIntent.FLAG_ONE_SHOT
                    | PendingIntent.FLAG_CANCEL_CURRENT));
    finish();
}

@Override
public void onDoneA(String login, String opwd, String npwd) {
    if(login!="" && opwd!="" && npwd!=""){
        changeAccount(login,opwd,npwd);
    }
}

private void changeAccount(String login, String opwd, String npwd) {
    new AccountPreference(this).setAccountL(login);
    new AccountPreference(this).setAccountOP(opwd);
    new AccountPreference(this).setAccountNP(npwd);
}

@Override
public void onDone() {
    int x = 0;
}
}

activity_main.xml

<android.support.v4.widget.DrawerLayout  xmlns:android="http://schemas
     .android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<RelativeLayout
    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"
    android:layout_width="match_parent" android:id="@+id/content"
    android:layout_height="match_parent" >
</RelativeLayout>

<!-- The navigation drawer -->

<ExpandableListView
    android:id="@+id/left_drawer"
    android:layout_width="300dp"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:background="#000"
    android:choiceMode="singleChoice"
    android:divider="@color/abs__bright_foreground_disabled_holo_dark"
    android:dividerHeight="2dp" />
<ExpandableListView
    android:id="@+id/right_drawer"
    android:layout_width="200dp"
    android:layout_height="300dp"
    android:layout_gravity="end"
    android:background="#000"
    android:choiceMode="singleChoice"
    android:divider="@color/abs__bright_foreground_disabled_holo_dark"
    android:dividerHeight="2dp" />

    </android.support.v4.widget.DrawerLayout>

ExpandableListAdapter.java

package com.webileapps.navdrawer;

import java.util.HashMap;
import java.util.List;

import android.content.Context;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<Model> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<Model, List<Model>> _listDataChild;

public ExpandableListAdapter(Context context, List<Model> listDataHeader,
                             HashMap<Model, List<Model>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this.
   _listDataHeader.get(groupPosition)).get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
         boolean isLastChild, View convertView, ViewGroup parent) {

 final Model childText = (Model) getChild(groupPosition, childPosition);

    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }

    TextView txtListChild = (TextView) convertView
            .findViewById(R.id.lblListItem);
    ImageView IconListChild = (ImageView)  convertView.findViewById
                  (R.id.item_icon_child);
    IconListChild.setImageResource(childText.getIcon());
    txtListChild.setText(childText.getTitle());
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    int i=0;
    switch (groupPosition) {
        case 1:
        i= this._listDataChild.get
  (this._listDataHeader.get(groupPosition)).size();
            break;
        default:
            i=0;
            break;
    }
    return i;
}

@Override
public Model getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    Model headerTitle = (Model) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    TextView lblListHeader = (TextView) convertView
            .findViewById(R.id.lblListHeader);
    ImageView IconListHeader = (ImageView) convertView.findViewById
           (R.id.item_icon_group);
    IconListHeader.setImageResource(headerTitle.getIcon());
    lblListHeader.setTypeface(null, Typeface.BOLD);
    lblListHeader.setText(headerTitle.getTitle());

    return convertView;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

 }

解决方案

In the Navigation Drawer layout xml file. Above drawerView and inside your parent layout add an image view as shown below:

<ImageView
        android:id="@+id/image"
        android:layout_width="280dp"
        android:layout_height="140dp"
        android:src="respective_source_of_image" />

This should be sufficient. Hope this helps.

Use Recycler View to create a navigation drawer. Recycler view is used most now. In your navigation drawer fragment have your layout file as shown below. This make you achieve your objective:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context="com.ms.t.tms.NavigationDrawerFragment">


    <ImageView
        android:id="@+id/image"
        android:layout_width="280dp"
        android:layout_height="140dp"
        android:src="respective_image_src" />


    <android.support.v7.widget.RecyclerView
        android:id="@+id/drawerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_below="@+id/image"

        android:background="@color/colorPrimary"></android.support.v7.widget.RecyclerView>


</RelativeLayout>

这篇关于我可以在导航抽屉布局添加图像头的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆