Android SlidingDrawer сверху?

Есть ли способ сделать слайдер слайда сверху вниз?

Ответ 2

Я нашел простой способ сделать это. Все, что вам нужно сделать, это установить поворот на 180º для скользящего устройства, содержимого и рукоятки. Это проще понять на примере, поэтому посмотрите, что я сделал:

Сначала я покажу вам мой старый SlidingDrawer, снизу вверх.

<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slidingDrawer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:handle="@+id/handle"
    android:content="@+id/content">
    <ImageView android:id="@+id/handle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_launcher" />
    <ImageView android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FF0000"
        android:src="@drawable/ic_launcher" />
</SlidingDrawer>

Теперь посмотрим на изменения, которые я сделал, установив поворот на 180º

<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slidingDrawer"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:handle="@+id/handle"
    android:content="@+id/content"
    android:rotation="180">
    <LinearLayout android:id="@+id/handle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
        <ImageView android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:src="@drawable/ic_launcher"
            android:rotation="180" />
    </LinearLayout>
    <ImageView android:id="@+id/content"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="#FF0000"
        android:src="@drawable/ic_launcher"
        android:rotation="180" />
</SlidingDrawer>

Обратите внимание, что я также создал LinearLayout для установки в качестве дескриптора и не менял его вращение, но я изменил его рождение. Это было для предотвращения небольшой проблемы, которую я имел, но все работает нормально, и это просто.

Ответ 3

Я был очень недоволен предлагаемыми здесь решениями:

  • Класс Panel из http://code.google.com/p/android-misc-widgets/ был действительно неинтуитивным для использования, а также имел ошибки и наглядные глюки (непригодные для продуктивного использования) и никаких документов вообще
  • SlidingTray класс из http://aniqroid.sileria.com/doc/api/ был вложен в lib, нуждающийся в слишком большой зависимости, и для меня я не получил его работать все
  • с использованием android:rotation="180" требуется API-уровень 11, а моя цель - 10.

(без нарушений для соответствующих разработчиков, пытаясь быть объективным здесь)

Итак, моим решением было извлечь SlidingTray из этого lib http://aniqroid.sileria.com/doc/api/ (Ахмед Шакил) и отредактировал его немного, так как у него были некоторые причуды, необходимые для использования в Ahmed lib. SlidingTray основан на Androids own SlidingDrawer, поэтому я думаю, что он стабилен. Мое изменение состоит из 1 класса, который я назвал MultipleOrientationSlidingDrawer и вы должны добавить declare-styleables в свой attrs.xml. Кроме того, он имеет почти такое же использование, как SlidingDrawer с дополнительным атрибутом "ориентация".

Проверьте это: MultipleOrientationSlidingDrawer (источник и пример) @gist

Вот пример использования (также представленный в тексте)

<your.app.MultipleOrientationSlidingDrawer
        xmlns:custom="http://schemas.android.com/apk/res-auto/your.app"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        custom:handle="@+id/handle_c"
        custom:content="@+id/content_c"
        custom:orientation="top">
        <RelativeLayout
            android:id="@id/handle_c"
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:background="#333333">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:text="Handle Text"
                android:gravity="left|center_vertical"/>
        </RelativeLayout>

        <FrameLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@id/content_c"
            android:background="#555555">

            <ListView
                android:id="@+id/listview_credits"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>
        </FrameLayout>
    </your.app.MultipleOrientationSlidingDrawer>

Отказ от ответственности: все кредиты передаются соответствующим разработчикам. Я не тестировал это решение экстенсивно, он отлично работает с TOP и BOTTOM, установленными в XML. Я не пытался использовать его программно.

Ответ 4

Мне пришлось сделать то же самое для одного из моих проектов, и в итоге я написал свой собственный виджет. Я назвал его SlidingTray теперь является частью моей открытой библиотеки Aniqroid.

http://aniqroid.sileria.com/doc/api/ (Посмотрите на загрузки внизу или используйте проект кода Google, чтобы увидеть дополнительные параметры загрузки: http://code.google.com/p/aniqroid/downloads/list)

Документация по классам находится здесь: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/SlidingTray.html