@Atllantis

Проблема с Navigation Drawer. Как решить?

Вот пример:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

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

    <LinearLayout
        android:id="@+id/drawer_right"
        android:layout_width="320dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:background="@color/drawer_bg"
        android:orientation="vertical" />

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


Нигде вроде не сказано, что ящик должен быть только элементом ListView (по крайней мере в доках я такого не нашёл).
По этому я решил использовать LinearLayout. И столкнулся с некоторыми проблемами:
1. Если внутри ящика остаётся пустое пространство, то прикоснувшись в пустом месте и проведя пальцем вниз или вверх, прокручивается контент который расположен в FrameLayout.
2. Разметка содержимого внутри ящика некорректно работает. Т.е. например мне нужно внутри разместить LinearLayout с параметром android:layout_height="match_parent". Но почему-то этот LinearLayout не растягивается по всей высоте, а ведёт себя как будто layout_height = wrap_content.
8425bdd0ef684ae8b0c58e8699d78b45.png
Отсюда возникает 2 вопроса:
1. Как сделать так, чтобы на действия в ящике не реагировал основной контент?
2. Как растянуть LinearLayout (который находится внутри ящика) на всю высоту ящика?
  • Вопрос задан
  • 791 просмотр
Решения вопроса 2
@onepavel
Консультация и разработка мобильных приложений
android:clickable="true"
Ответ написан
@Atllantis Автор вопроса
Если у кого будут такие же проблемы как и у меня (2-й пункт)...
По скольку я программно вставляю представление в ящик (о чём успешно забыл написать в шапке), то после получения представления, нужно ему установить параметры так же программно (да же если в XML указан android:layout_height="match_parent"):
View view = getLayoutInflater().inflate(R.layout.drawer,null);
view.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 
        ViewGroup.LayoutParams.MATCH_PARENT));

Если этого не сделать, то похоже "layout_height" автоматически присваивается "wrap_content".
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ewintory
@Ewintory
Java / Android developer
Привет. Ящик как я знаю можно делать любым контейнером(ViewGroup).

1) Нужно перехватывать в ящике события нажатия. Например обернуть ящик в ScrollView, тем самым скроллинг будет перехватываться с основного контента.
2) С чего вы взяли что не растягивается? Может он растягивается, просто его внутренний контент остается висеть сверху. Растягивается ли он в Preview? Можно еще включить опцию отображения layout bounds в настройках телефона и глянуть что происходит.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы