2015-09-26 66 views
2

我在這裏有一個代碼,用於設置導航抽屜。導航抽屜漢堡包圖標丟失

import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBar; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import com.defcomm.invento.NavigationDrawerActivity; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

public class INVENTO extends AppCompatActivity { 

private Toolbar toolbar; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_invento); 
    toolbar= (Toolbar) findViewById(R.id.app_bar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().setDisplayShowHomeEnabled(true); 
    NavigationDrawerActivity drawerFragment= (NavigationDrawerActivity) getSupportFragmentManager(). 
      findFragmentById(R.id.navigation_drawer); 
     drawerFragment.setUp(R.id.navigation_drawer, (DrawerLayout) findViewById(R.id.drawerlayout), toolbar); 


} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_invento, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle action bar item clicks here. The action bar will 
    // automatically handle clicks on the Home/Up button, so long 
    // as you specify a parent activity in AndroidManifest.xml. 
    int id = item.getItemId(); 

    //noinspection SimplifiableIfStatement 
    if (id == R.id.action_settings) { 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

}

導航活性起着:

import android.content.Context; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
    import android.support.v4.widget.DrawerLayout; 
import android.support.v7.app.ActionBarDrawerToggle; 
import android.support.v7.widget.Toolbar; 
    import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class NavigationDrawerActivity extends Fragment { 


private ActionBarDrawerToggle mdrawerToggle; 
private DrawerLayout mdrawerLayout; 

private boolean mUserLearnedState; 
View containerId; 
public static final String file_pref_name="Testpef"; 
public static final String KEY_USER_VALUE="user_learned_drawer"; 
private boolean mfromSavedInstanceState; 
public NavigationDrawerActivity() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(@Nullable Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    mUserLearnedState=Boolean.valueOf(readPreference(getActivity(), KEY_USER_VALUE, "false")); 
    if (savedInstanceState!=null){ 
     mfromSavedInstanceState=true; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 

} 


public void setUp(int fragmentId,DrawerLayout drawerlayout,Toolbar toolbar) { 
    mdrawerLayout=drawerlayout; 
    containerId=getActivity().findViewById(fragmentId); 
    mdrawerToggle= new ActionBarDrawerToggle(getActivity(),drawerlayout, 
      R.string.drawer_open,R.string.drawer_close){ 
     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if(!mUserLearnedState){ 
       mUserLearnedState=true; 
       saveToPreference(getActivity(),KEY_USER_VALUE,mUserLearnedState+""); 
      } 
      getActivity().invalidateOptionsMenu(); 
     } 

     @Override 
     public void onDrawerClosed(View drawerView) { 
      super.onDrawerClosed(drawerView); 
      mdrawerToggle.setDrawerIndicatorEnabled(true); 
      getActivity().invalidateOptionsMenu(); 
     } 
    }; 
    if(!mUserLearnedState&&!mfromSavedInstanceState){ 
     mdrawerLayout.openDrawer(containerId); 
    } 

    mdrawerLayout.setDrawerListener(mdrawerToggle); 

    mdrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mdrawerToggle.syncState(); 
      mdrawerToggle.setDrawerIndicatorEnabled(true); 
     } 
    }); 

} 
public static void saveToPreference (Context context,String preferenceName,String preferenceValue){ 
    SharedPreferences shared= context.getSharedPreferences(file_pref_name, Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor=shared.edit(); 
    editor.putString(preferenceName,preferenceValue); 
    editor.apply(); 
} 
public static String readPreference(Context context,String preferenceName,String defaultValue){ 
    SharedPreferences share= context.getSharedPreferences(file_pref_name,Context.MODE_PRIVATE); 
    return share.getString(preferenceName,defaultValue); 
} 

}

除了這應該是有點擊並打開抽屜漢堡包圖標不appearing.MainActivity一切工作正常

mainactivity.xml

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:id="@+id/drawerlayout" 
android:layout_height="match_parent" 
xmlns:app="http://schemas.android.com/apk/res-auto"> 

<RelativeLayout android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    > 
    <include 
     layout="@layout/app_bar" 
     android:id="@+id/app_bar"/> 
    <TextView 
     android:layout_below="@+id/app_bar" 
     android:text="@string/hello_world" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</RelativeLayout> 
<fragment 
    android:id="@+id/navigation_drawer" 
    android:layout_width="@dimen/drawer_width" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    app:layout="@layout/fragment_navigation_drawer" 
    android:name="com.defcomm.invento.NavigationDrawerActivity" 
    tools:layout="@layout/fragment_navigation_drawer" /> 

我不知道這裏的故障在哪裏。我在這裏使用自定義工具欄進行了交叉檢查。但沒有任何工作,我不知道這個錯誤是否真的在這裏。請幫忙。

+0

我的mainactivity.xml文件看起來像這樣: – Midhun

回答

3
final ActionBar actionBar = getSupportActionBar(); 
    if(actionBar!=null) 
    { 
     actionBar.setHomeAsUpIndicator(android.R.drawable.ic_drawer); 
     actionBar.setDisplayHomeAsUpEnabled(true); 
    } 

在您的任何活動中使用上面的代碼來放置導航抽屜的圖標。你甚至可以在不同的活動中改變它。

使用此下面的代碼 -

@Override 
    public void onBackPressed(){ 
    if(drawer.isDrawerOpen()){ //replace this with actual function which returns   
    drawer.close();  
    // replace this with actual function which closes  drawer 
     } 
     else{ 
     super.onBackPressed(); 
     } 
    } 
+0

先生,我在我的項目中使用這種方法,但點擊它的抽屜不會彈出。請幫助我。儘管按鈕顯示 – Midhun

+1

讓我給你一個簡單的解決方案,這將有助於你理解。並會給你一個預先編碼的代碼。 如果你使用的是eclipse,那麼點擊文件>新建>其他> Android> AndroidActivityNavigationDrawer 及其類似的Android Studio。右鍵單擊包>新建文件>活動> NavigationDrawer活動。試試這一次,你會明白所有的流程。 –

+0

請參閱上一段 –

1

使用此主題爲您的活動manifest.xml

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/primaryColor</item> 
     <item name="colorPrimaryDark">@color/primaryColor</item> 
     <item name="colorAccent">@color/primaryColor</item> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:textColorPrimary">@android:color/white</item> 
     <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
     <item name="actionMenuTextColor">@android:color/holo_blue_dark</item> 
     <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item> 
     <item name="android:windowBackground">@android:color/white</item> 
     <item name="android:screenOrientation">portrait</item> 
    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@android:color/white</item> 
    </style> 

    <style name="ToolBarStyle" parent=""> 
     <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> 
     <item name="theme">@style/ThemeOverlay.AppCompat.Light</item> 
    </style> 

和上述API 21使用本

<style name="AppTheme" parent="Theme.AppCompat.Light"> 
     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/primaryColor</item> 
     <item name="colorPrimaryDark">@color/primaryColor</item> 
     <item name="colorAccent">@color/primaryColor</item> 
     <item name="android:textColorPrimary">@android:color/white</item> 
     <item name="android:navigationBarColor">@android:color/black</item> 
     <item name="drawerArrowStyle">@style/DrawerArrowStyle</item> 
     <item name="actionMenuTextColor">@android:color/holo_blue_dark</item> 
     <item name="android:actionMenuTextColor">@android:color/holo_blue_dark</item> 
     <item name="android:windowDrawsSystemBarBackgrounds">true</item> 
     <item name="android:statusBarColor">@android:color/black</item> 
     <item name="windowActionBar">false</item> 
     <item name="windowNoTitle">true</item> 
     <item name="android:windowBackground">@android:color/white</item> 
     <item name="android:windowContentTransitions">true</item> 
     <item name="android:screenOrientation">portrait</item> 
    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
     <item name="color">@android:color/white</item> 
    </style> 

    <style name="ToolBarStyle" parent=""> 
     <item name="android:elevation">@dimen/toolbar_elevation</item> 
     <item name="android:transitionName">actionBar</item> 
     <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item> 
     <item name="theme">@style/ThemeOverlay.AppCompat.Light</item> 
    </style> 

,然後在你的MainActivity設置工具欄如下

mToolbar = (Toolbar) findViewById(R.id.toolbar_actionbar); 
     setSupportActionBar(mToolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     getSupportActionBar().setTitle("Your Title"); 

,並在您的活動

setupNavigationView(); 

onCreate調用此方法,這裏是上述方法

private void setupNavigationView() { 
     mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); 

     ActionBarDrawerToggle actionBarDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) { 

      @Override 
      public void onDrawerClosed(View drawerView) { 
       // Code here will be triggered once the drawer closes as we dont want anything to happen so we leave this blank 
       super.onDrawerClosed(drawerView); 
      } 

      @Override 
      public void onDrawerOpened(View drawerView) { 
       // Code here will be triggered once the drawer open as we dont want anything to happen so we leave this blank 

       super.onDrawerOpened(drawerView); 
      } 
     }; 

     //Setting the actionbarToggle to drawer layout 
     mDrawerLayout.setDrawerListener(actionBarDrawerToggle); 

     //calling sync state is necessay or else your hamburger icon wont show up 
     actionBarDrawerToggle.syncState(); 


    } 
+0

檢查這個編輯答案它的測試和完美的作品! – Shishram

0

這一切OK對不起,我沒有一個錯誤,我所做的自定義工具欄,我沒有把它作爲參數傳遞給mdrawerToggle.Now它工作正常。