2016-01-15 2 views
1

Приложение работает хорошо, за исключением того факта, что при вводе некоторых заметок первая заметка исчезает за панель приложения. Как я могу запустить эту часть из панели приложений?текст заметки начинается за панель приложения

3 ноты, только 2 видно 3 notes, only 2 visible

XML:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fitsSystemWindows="true" 
tools:openDrawer="start"> 


<android.support.design.widget.NavigationView 
    android:id="@+id/nav_view" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:fitsSystemWindows="true" 
    app:headerLayout="@layout/nav_header_main" 
    app:menu="@menu/activity_main_drawer" /> 

<ListView 
    android:id="@+id/android:list" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"/> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".Notities"> 



    <at.markushi.ui.CircleButton 
    android:layout_width="64dp" 
    android:layout_height="wrap_content" 
    app:cb_color="@color/primary" 
    app:cb_pressedRingWidth="8dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentEnd="true" 
    android:layout_alignParentRight="true" 
    android:src="@drawable/ic_action_add" 
    android:onClick="openEditorForNewNote" 
    android:minWidth="64dp" 
    android:minHeight="64dp" /> 

</RelativeLayout> 

<include 
    layout="@layout/app_bar_notities" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

<!--<Button--> 
<!--android:id="@+id/button"--> 
<!--android:layout_width="wrap_content"--> 
<!--android:layout_height="wrap_content"--> 
<!--android:layout_alignParentBottom="true"--> 
<!--android:layout_alignParentEnd="true"--> 
<!--android:layout_alignParentRight="true"--> 
<!--android:onClick="openEditorForNewNote"--> 
<!--android:text="New note" />--> 

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

ответ

4

DrawerLayout и AppBar оба, кажется, неправильно настроена. Ваш DrawerLayout должен содержать только двух детей, один для основного контента и один для содержимого ящика. Содержимое ящика должно быть ниже основного содержимого вашего XML, а layout_width для содержимого ящика, вероятно, должно быть задано как размер, обычно 240dp. Что-то вроде этого:

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

    <include android:id="@+id/content_frame" layout="@layout/content_frame"/> 

    <android.support.design.widget.NavigationView android:id="@+id/nav_drawer" 
     android:layout_width="@dimen/width_nav_drawer" android:layout_height="match_parent" 
     android:layout_gravity="start" android:choiceMode="singleChoice" 
     app:headerLayout="@layout/nav_header_main" app:menu="@menu/drawer_main"/> 

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

Тогда ваш AppBar должен быть помещен в CoordinatorLayout в вашем content_frame, с вашим основным содержанием (ваш ListView), размещенные ниже:

<android.support.design.widget.CoordinatorLayout xmlsn: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:fitsSystemWindows="true"> 

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

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

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

    <include android:id="@+id/content_main" layout="@layout/content_main"/> 

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

И, наконец, ваш ListView (или RecyclerView) могут быть размещены в любом виде макета, который вы выбрали (я выбрал здесь FrameLayout):

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/layout_main" 
    android:layout_width="match_parent" android:layout_height="match_parent" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior"> 

    <ListView android:id="@+id/list" 
     android:layout_width="match_parent" android:layout_height="match_parent"/> 

</FrameLayout> 

Кроме того, если вы заметили, я включил атрибут app:layout_behavior="@string/appbar_scrolling_view_behavior" в мой FrameLayout. Это важно, поскольку он устанавливает поведение AppBarLayout и как он должен реагировать на ваш FrameLayout. В принципе, это делает его таким, чтобы его вид был ниже AppBar, и при необходимости может прокручиваться.


Side Примечание:

Я также заметил, что вы используете at.markushi.ui.CircleButton из внешней библиотеки. Эта библиотека была создана до того, как Google представила библиотеку поддержки, включая кнопку Floating Action, и теперь находится deprecated. Поскольку Google представила новый FloatingActionButton, вы можете использовать его в CoordinatorLayout в качестве последнего элемента:

<android.support.design.widget.FloatingActionButton android:id="@+id/btn_action" 
    android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:layout_margin="@dimen/margin_standard" android:layout_gravity="end|bottom" 
    android:src="@drawable/ic_camera_white_24dp" 
    android:onClick="openEditorForNewNote"/> 
0

Вы должны обернуть ToolBar и ListView в RelativeLayout и дать layout_below свойство к ListView, так что речь идет ниже ToolBar. Что-то вроде этого,

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true" 
    tools:openDrawer="start"> 

    <android.support.design.widget.NavigationView 
     android:id="@+id/nav_view" 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:layout_gravity="start" 
     android:fitsSystemWindows="true" 
     app:headerLayout="@layout/nav_header_main" 
     app:menu="@menu/activity_main_drawer" /> 


    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     tools:context=".Notities"> 

     <include 
      android:id="@+id/app_bar" 
      layout="@layout/app_bar_notities" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

     <ListView 
      android:id="@+id/android:list" 
      android:layout_below="@id/app_bar" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"/> 

     <at.markushi.ui.CircleButton 
      android:layout_width="64dp" 
      android:layout_height="wrap_content" 
      app:cb_color="@color/primary" 
      app:cb_pressedRingWidth="8dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentEnd="true" 
      android:layout_alignParentRight="true" 
      android:src="@drawable/ic_action_add" 
      android:onClick="openEditorForNewNote" 
      android:minWidth="64dp" 
      android:minHeight="64dp" /> 

    </RelativeLayout> 

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

это в не лучшей практике, и может привести к неожиданным результатам. Если вы выступаете в качестве «ActionBar», «Панель инструментов» должна быть помещена в «AppBarLayout» и «CoordinatorLayout», описанные здесь: http://developer.android.com/reference/android/support/design/widget/AppBarLayout. html – Bryan

+0

@Bryan Спасибо за отзыв. Постараемся улучшить. :) –