2016-01-20 34 views
7

Zajmuję się tworzeniem aplikacji, w której korzystam z kontrolera widoku nawigacyjnego nowej biblioteki obsługi projektu dla menu szuflady. Wszystko działa dobrze. Ustawiłem elementy do widoku nawigacji, używając atrybutu app:menu. Elementy są doskonale wyświetlane. Teraz dodam app:actionLayout dla tych produktów i również jest dodawane, ale problem polega na tym, że jest wyświetlany z prawej strony w widoku.ActionLayout dla elementów widoku nawigacji po prawej stronie

Moja Aktywność XML

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

<RelativeLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

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

     <afour.com.uniapp.customwidgets.CustomTextView 
      android:id="@+id/text_toolbarTitle" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center" 
      android:gravity="start" 
      android:text="@string/app_name" 
      android:textColor="@android:color/white" 
      android:textSize="20sp" 
      app:FontName="@string/type_face_splash" /> 
    </android.support.v7.widget.Toolbar> 


    <FrameLayout 
     android:id="@+id/frame_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_below="@id/toolbar" /> 

     </RelativeLayout> 

<android.support.design.widget.NavigationView 
    android:id="@+id/navigation_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:background="@android:color/holo_green_dark" 
    android:paddingTop="20dp" 
    app:headerLayout="@layout/navigation_header_layout" 
    app:paddingStart="0dp" 
    app:itemBackground="@android:color/holo_green_light" 
    app:itemTextColor="@android:color/white" 
    app:menu="@menu/main_menu" /> 

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

Mój plik menu

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

<item 
    android:id="@+id/nav_about" 
    android:title="@string/aboutus" 
    app:showAsAction="never" /> 

<item 
    android:id="@+id/nav_logout" 
    app:actionLayout="@layout/logout_item_layout" 
    app:showAsAction="collapseActionView" /> 

</menu> 

mój plik układ działanie

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

<ImageButton 
    android:layout_width="60dp" 
    android:layout_height="60dp" 
    android:layout_marginLeft="10dp" 
    android:layout_marginStart="10dp" 
    android:background="@android:color/transparent" 
    android:contentDescription="@string/aboutus" 
    android:padding="05dp" 
    android:src="@android:drawable/ic_menu_help" /> 

<afour.com.uniapp.customwidgets.CustomTextView 
    android:id="@+id/text_logout" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="20dp" 
    android:layout_marginStart="20dp" 
    android:gravity="start" 
    android:text="@string/logout" 
    android:textColor="@android:color/white" 
    android:textSize="20sp" 
    app:FontName="@string/type_face_regular" /> 

</LinearLayout> 

PFA emisji See the action layout displayed in red in right corner

Odpowiedz

1

W swoim działaniu pliku XML szablonu, można rozwiązać problem dodając do widoku głównego (LinearLayout w twoim przypadku) następujących właściwości:

<LinearLayout 
    ... 
    android:layout_gravity="start"> 

jednak wziąć pod uwagę, co dokumentacja mówi o actionLayout:

android: actionLayout: Układ zasobu. Układ do użycia jako widok akcji. https://developer.android.com/guide/topics/resources/menu-resource.html

i actionView:

widok działanie jest działaniem, które zapewnia bogatą funkcjonalność wewnątrz pasku aplikacji. Na przykład widok akcji wyszukiwania umożliwia użytkownikowi wpisanie tekstu wyszukiwania w pasku aplikacji bez konieczności zmiany działań lub fragmentów. https://developer.android.com/training/appbar/action-views.html

Więc może to nie jest najlepszy sposób, aby wyświetlić widok niestandardowy w swojej MenuItem.

Widząc swój kod, dlaczego nie wystarczy dodać ikony i tekstu do elementu elementu?

<item 
    android:id="@+id/nav_logout" 
    android:icon="@android:drawable/ic_menu_help" 
    android:text="@string/logout" /> 

Ale jeśli naprawdę potrzebujesz, to właściwa droga, aby wyświetlić widok niestandardowy wdraża ListView z ViewHolder wzorca.