Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

SlidingPaneLayout

На конференции Google I/O 2013 был представлен новый вид разметки SlidingPaneLayout. По своему использованию он немного напоминает компонент DrawerLayout. Но его основное отличие - он предназначен для двухпанельного режима на больших экранах, который при этом адаптируется под маленькие экраны. Пользователь может сдвинуть на время панель с содержанием, чтобы увидеть его на весь экран.

SlidingPaneLayout входит в состав библиотеки Support Library v4 (release 13), который вышел в мае 2013 года.

Запустим новый проект (минимум API 16) и создадим разметку с двумя дочерними элементами:


<android.support.v4.widget.SlidingPaneLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/sliding_pane_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:background="@android:color/holo_blue_bright"
        android:text="Левая панель" />

    <TextView
        android:layout_width="400dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:background="@android:color/holo_blue_light"
        android:text="Правая панель" />

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

Вам придётся вручную прописывать тег для SlidingPaneLayout, так как на панели инструментов его нет.

Первый дочерний элемент является левой частью панели (навигация). В нём указывается размер через атрибут android:layout_width. В зависимости от заданного размера правая панель может перекрыть левую панель.

Второй дочерний элемент отвечает за правую часть панели (содержание). Атрибут android:layout_weight указывает на возможность занять всё доступное место на экране, при этом нужно также указать минимальную ширину в android:layout_width.

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

В принципе этого достаточно для минимального функционирования SlidingPaneLayout. Можно запустить проект и подвигать левую панель. При этом вторая панель будет сдвигаться в сторону и затемняться при уменьшении. В альбомном режиме затемнение может не происходить.

SlidingPaneLayout

Мы можем отключить затемнение через метод


private SlidingPaneLayout mSlidingLayout;

// onCreate()
mSlidingLayout = findViewById(R.id.sliding_pane_layout);
mSlidingLayout.setSliderFadeColor(Color.TRANSPARENT);

Если хочется, чтобы левая панель была частично видна при запуске, то можно у правой панели установить отступ.


android:layout_marginLeft="64dp"

Чтобы панель была в открытом состоянии при запуске, вызовем метод openPane(). Отслеживать события открытия и закрытия панели можно через слушатель SimplePanelSlideListener.


mSlidingLayout.openPane();

mSlidingLayout.setPanelSlideListener(new SlidingPaneLayout.PanelSlideListener() {
    @Override
    public void onPanelSlide(View panel, float slideOffset) {
        Log.i("Sliding", "Slide");
    }

    @Override
    public void onPanelOpened(View panel) {
        Log.i("Sliding", "Opened");
    }

    @Override
    public void onPanelClosed(View panel) {
        Log.i("Sliding", "Closed");
    }
});
Реклама