2016-09-15 3 views
1

Этот вопрос включает в себя Xamarin Android и использование C#, но я думаю, что разработчик Java с помощью Android Studio ... все еще может понять проблему и может помочь.AppCompatActivity с новой кнопкой панели инструментов с кнопкой «Домой» не отображается правильно?

Как я исследовал в сети, все должно быть простым. Проблема здесь в том, что Toolbar (в библиотеке поддержки v7) отображается сверху, но кнопка «Домой» не отображается так, как я хочу. У меня есть DrawerLayout в главном макете, нажатие на кнопку «Домой» должно расширить раскладку ящика и вместе с тем, что значок «Домой» должен переключиться на значок со стрелкой влево (значок назад). Щелчок по кнопке «Назад» должен свернуть макет ящика и переключить значок обратно на начальный значок дома.

У меня теперь была кнопка «Домой», всегда отображается значок стрелки влево. Я думаю, это потому, что я использую вызов SupportActionBar.SetDisplayHomeAsUpEnabled(true); Но без установки, как показано на рисунке, ничего не отображается, поэтому нажимать не на что.

Вот код, в результате чего кнопка рабочего дома, но его иконка всегда показывает стрелка влево:

Формуляром Панель:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"  
    android:layout_width="match_parent" 
    android:id="@+id/mainToolbar"  
    android:background="?attr/colorPrimary"         
    android:layout_height="@dimen/ToolbarHeight"> 
</android.support.v7.widget.Toolbar> 

Код за:

//here is in OnCreate callback of the main Activity 
var toolBar = FindViewById<Toolbar>(Resource.Id.mainToolbar); 
SetSupportActionBar(toolBar); 
SupportActionBar.SetDisplayShowHomeEnabled(true); 
SupportActionBar.SetDisplayHomeAsUpEnabled(true);    
SupportActionBar.SetHomeButtonEnabled(true); 

С приведенным выше кодом, если я выхожу из строки SupportActionBar.SetDisplayHomeAsUpEnabled(true);, то ничего не отображается (пока я хочу, чтобы некоторые иконки, такие как значок приложения , были показаны).

Я надеюсь, что кто-то здесь сможет понять, чего я пропустил здесь. BTW Я запускаю код на Android 4.4.4, хотя я думаю, что это не проблема версии Android (потому что в этом случае библиотека поддержки должна работать).

UPDATE: Основной макет:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:id="@+id/rootFrame" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/main"           
     android:orientation="vertical" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     > 
     <!-- main content --> 
     <LinearLayout 
     android:id="@+id/mainContent" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:orientation="vertical"> 
     <include layout="@layout/MainToolBar"/> 
     <FrameLayout android:layout_height="fill_parent" 
        android:layout_width="fill_parent" 
        android:id="@+id/contentFrame"></FrameLayout> 
     </LinearLayout> 

     <!-- left menu --> 
     <android.support.design.widget.NavigationView  
      android:layout_height="fill_parent" 
      android:layout_width="wrap_content" 
      android:minWidth="@dimen/LeftMenuMinWidth" 
      android:layout_gravity="start" 
      android:fitsSystemWindows="false" 
      android:background="@color/LeftMenuBackgroundColor"  
      android:id="@+id/leftMenu"> 
      <!-- layout for the menu here ... --> 
     </android.support.design.widget.NavigationView> 
    </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 

Код для настройки ящика слушателя, это помещается после кода установки панели инструментов я отправил выше:

var dl = FindViewById<DrawerLayout>(Resource.Id.main); 
//the ActionBarDrawerToggle here is from Android.Support.V7.app 
dl.AddDrawerListener(new ActionBarDrawerToggle(this, dl, toolBar, 0, 0)); 

Надеюсь, теперь я предоставил достаточно кода.

+0

@MikeM.Я установил слушателя, поэтому я сказал, что кнопка «Домой» работает (но ее значок продолжает отображаться как стрелка влево), ящик сбрасывается/расширяется ОК (это когда я использую 'SupportActionBar.SetDisplayHomeAsUpEnabled (true);'), но без использования этого ничего не отображается и ничего не нажимать. Благодарю. – Hopeless

+0

Интерфейс 'DrawerListener 'не является тем, что открывает/закрывает ящик. Это то, что позволяет значку оживлять. Пожалуйста, разместите соответствующий код для вашего переключения. –

+0

О, и вызов 'SetDisplayShowHomeEnabled() не нужен, но я не могу вспомнить atm, если это помешало бы значку переключателя. –

ответ

1

При использовании ActionBarDrawerToggle вам необходимо позвонить SyncState() после инициализации, чтобы заставить его фактически установить свой собственный значок в навигационной кнопке.

Это также рекомендуется сделать в методе OnPostCreate(), поэтому он может синхронизироваться правильно, если, например, выдвижной ящик открыт во время вращения устройства.