2016-09-14 3 views
2

Я создаю приложение Xamarin для Android, и я хочу реализовать правый навигационный ящик с ящиком toogle в пользовательской панели действий. Все работает (выдвижные слайды с правой стороны, ...), за исключением одного: значок ящика навигации не отображается.Значок навигационного ящика не отображается

Итак, это мой Activity.axml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <android.support.v4.widget.DrawerLayout 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#ffffff" 
      android:id="@+id/drawerLayout"> 

      <!-- Main Content --> 
      <FrameLayout xmlns:tools="http://schemas.android.com/tools" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <fragment 
        android:name="com.google.android.gms.maps.MapFragment" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:scrollbars="vertical" 
        android:id="@+id/map" /> 
        ... 
      </FrameLayout> 

      <!-- Right Navigation Drawer --> 
      <LinearLayout 
       android:orientation="vertical" 
       android:layout_width="250dp" 
       android:layout_height="match_parent" 
       android:layout_gravity="right" 
       android:background="#f2f2f2"> 
       ... 
      </LinearLayout> 
    </android.support.v4.widget.DrawerLayout> 
</RelativeLayout> 

И это мой Activity.cs:

using Android.Support.V4.App; 
using Android.Support.V4.Widget; 
... 

public class Activity : Activity 
{ 
    ... 
    private DrawerLayout mDrawerLayout; 
    private ActionBarDrawerToggle mDrawerToogle; 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 

     ActionBar.SetDisplayShowHomeEnabled(false); 
     ActionBar.SetDisplayShowTitleEnabled(false); 
     ActionBar.SetCustomView(Resource.Layout.CustomActionBar); 
     ActionBar.SetDisplayShowCustomEnabled(true); 

     SetContentView(Resource.Layout.Activity2); 

     mDrawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawerLayout); 
     mDrawerToogle = new ActionBarDrawerToggle(this, mDrawerLayout, Resource.Drawable.ic_drawer,Resource.String.open_drawer_layout, Resource.String.close_drawer_layout); 

     mDrawerLayout.SetDrawerListener(mDrawerToogle); 
     ActionBar.SetDisplayHomeAsUpEnabled(true); 
     ActionBar.SetHomeButtonEnabled(true); 

     ... 
    } 

    protected override void OnPostCreate(Bundle savedInstanceState) 
    { 
     base.OnPostCreate(savedInstanceState); 
     mDrawerToogle.SyncState(); 
    } 

    public override void OnConfigurationChanged(Configuration newConfig) 
    { 
     base.OnConfigurationChanged(newConfig); 
     mDrawerToogle.OnConfigurationChanged(newConfig); 
    } 

    public override bool OnOptionsItemSelected(IMenuItem item) 
    { 
     if (mDrawerToogle.OnOptionsItemSelected(item)) 
     { 
      return true; 
     } 

     return base.OnOptionsItemSelected(item); 
    } 
    ... 
} 

Это мой Themes.xml:

<resources> 
    <style name="CustomActionBarTheme" 
    parent="@android:style/Theme.Holo.Light.DarkActionBar"> 
     <item name="android:actionBarStyle">@style/ActionBar</item> 
    </style> 
    <style name="ActionBar" 
    parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> 
     <item name="android:height">75dp</item> 
     <item name="android:background">#00000000</item> 
    </style> 
</resources> 

Я делаю что-то не так? Любая помощь приветствуется.

UPDATE

Мои CustomActionBar имеет значок приложения и название приложения. Может быть, это может прерывать значок ящика навигации?

+0

вы смогли решить эту проблему? – user427969

+0

@ user427969 Я разместил свое решение ниже, поэтому, пожалуйста, проголосуйте, если он решит вашу проблему. – PeMaCN

ответ

0

Это решение, которое я нашел.

Во-первых, вам нужно добавить action_bar.xml файл со следующим содержимым в папку меню:

<?xml version="1.0" encoding="utf-8" ?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
    android:id="@+id/personalInfoActionBar" 
    android:title="Informations" 
    android:icon="@drawable/infoIcon" 
    android:showAsAction="always"/> 
</menu> 

Затем вставьте этот код в вашей деятельности:

public override bool OnOptionsItemSelected(IMenuItem item) 
{ 
    if (item.ItemId == Resource.Id.personalInfoActionBar) 
    { 
     if (mDrawerLayout.IsDrawerOpen(mRightDrawer)) 
     { 
       mDrawerLayout.CloseDrawer(mRightDrawer); 
     } 
     else 
     { 
       mDrawerLayout.OpenDrawer(mRightDrawer); 
     } 

     return true; 
    } 

    return base.OnOptionsItemSelected(item); 
} 
0

Не забудьте позвонить actionbarDrawerToggle.syncState()

+0

Я вызываю его в 'OnPostCreate()', и если я его вызываю в методе OnCreate() ', он также не будет показан. – PeMaCN

+0

Я думаю, что по умолчанию drawerToggle находится слева. Попробуйте поместить свой ящик слева, чтобы проверить, отображается ли значок. Если он появится, я думаю, вы должны создать свой собственный значок в панели действий. – Chenmin

+0

Нет, значок не отображается – PeMaCN

Смежные вопросы