2016-12-05 82 views
1

我在Android Studio中创建一个NavigationDrawerActivity。但现在我不需要工具栏。所以我从APPA-bar_main.xml删除工具栏:在活动添加ActionBarDrawerToggle,而无需使用工具栏

<?xml version="1.0" encoding="utf-8"?> 

<android.support.design.widget.AppBarLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:theme="@style/AppTheme.AppBarOverlay"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/toolbar" 
     android:background="?attr/colorPrimary" 
     app:popupTheme="@style/AppTheme.PopupOverlay" 
     android:layout_width="match_parent" 
     android:layout_height="56dp" /> 

</android.support.design.widget.AppBarLayout> 

<include layout="@layout/content_main" /> 

但我需要在屏幕上的一个TOP_LEFT切换按钮显示NavigationDrawer。 因为我删除工具栏,我不能使用下面的代码:

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
      this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close); 
    drawer.setDrawerListener(toggle); 
    toggle.syncState(); 

现在,我怎么可以一个切换按钮添加到我的活动?

+0

删除第三个参数'toolbar'和检查呢?多一点使用'addDrawerListener'因为'setDrawerListener'现在是'deprecated'。 – Ironman

+0

它显示切换按钮 – Paeez

+0

任何图标你能解释我越不明白您的评论 – Ironman

回答

1

可以使用几乎任何可点击的分量控制抽屉,例如一个按钮。您可以创建一个按钮下坡自定义组件,实现DrawerLayout.DrawerListener接口,例如:

package com.test.view; 

import android.content.Context; 
import android.util.AttributeSet; 
import android.util.Log; 
import android.view.Gravity; 
import android.view.View; 
import android.widget.Button; 
import android.support.v4.widget.DrawerLayout; 
import com.test.MainActivity; 

public class CustomDrawerButton extends Button implements DrawerLayout.DrawerListener { 

    private DrawerLayout mDrawerLayout; 
    private int side = Gravity.LEFT; 

    public CustomDrawerButton(Context context) { 
     super(context); 
    } 
    public CustomDrawerButton(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 
    public CustomDrawerButton(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public void changeState(){ 
     if (mDrawerLayout.isDrawerOpen(side)){ 
      mDrawerLayout.closeDrawer(side); 
     }else{ 
      mDrawerLayout.openDrawer(side); 
     } 
    } 

    @Override 
    public void onDrawerSlide(View drawerView, float slideOffset) { 
     Log.e("BUTTOM DRAWER: ", "onDrawerSlide"); 
    } 
    @Override 
    public void onDrawerOpened(View drawerView) { 
     Log.e("BUTTOM DRAWER: ", "onDrawerOpened"); 
     setText("Close\ndrawer"); 
    } 
    @Override 
    public void onDrawerClosed(View drawerView) { 
     Log.e("BUTTOM DRAWER: ", "onDrawerClosed"); 
     setText("Open\ndrawer"); 
    } 
    @Override 
    public void onDrawerStateChanged(int newState) { 
     Log.e("BUTTOM DRAWER: ", "onDrawerStateChanged"); 
    } 

    public DrawerLayout getDrawerLayout() { 
     return mDrawerLayout; 
    } 
    public CustomDrawerButton setDrawerLayout(DrawerLayout mDrawerLayout) { 
     this.mDrawerLayout = mDrawerLayout; 
     return this; 
    } 
} 

您可以在您的片段布局此组件:

<com.test.view.CustomDrawerButton 
    android:id="@+id/btnOpenDrawer" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:text="Open\ndrawer"/> 

而在包含您CustomDrawerButton片段或活性:

customDrawerButton = (CustomDrawerButton)view.findViewById(R.id.btnOpenDrawer); 
customDrawerButton.setDrawerLayout(mDrawer); 
customDrawerButton.getDrawerLayout().addDrawerListener(customDrawerButton); 
    customDrawerButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      customDrawerButton.changeState(); 
     } 
    }); 
0

尝试设置高度和从布局app_bar_操作栏= 0dp的宽度.. 所以不会对代码的影响,但会删除操作栏 这样

 <android.support.v7.widget.Toolbar 
 
      android:id="@+id/toolbar" 
 
      android:layout_width="0dp" 
 
      android:layout_height="0dp" 
 
      android:background="?attr/colorPrimary" 
 
      app:popupTheme="@style/AppTheme.PopupOverlay" />