Android SlidingDrawer сверху? - PullRequest
       8

Android SlidingDrawer сверху?

27 голосов
/ 12 сентября 2010

Есть ли способ заставить ящик выдвигаться сверху вниз?

Ответы [ 4 ]

31 голосов
/ 27 июня 2012

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

Сначала я покажу вам мой старый 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 для установки в качестве дескриптора и не изменил его вращение, но я изменил вращение его дочернего элемента. Это должно было предотвратить небольшую проблему, которая у меня была, но все работает нормально и все просто.

7 голосов
/ 20 августа 2013

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

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

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

Поэтому мое решение заключалось в том, чтобыизвлеките SlidingTray из этой библиотеки http://aniqroid.sileria.com/doc/api/ (от Ахмеда Шакиля) и немного измените его рефакторинг, так как в нем есть некоторые причуды, которые необходимо использовать в библиотеке Ахмеда.SlidingTray основан на собственном Android SlidingDrawer, так что я думаю, что он стабилен.Моя модификация состоит из 1 класса, который я назвал MultipleOrientationSlidingDrawer, и вы должны добавить объявляемые стили в своем файле attrs.xml.Кроме того, он используется почти так же, как SlidingDrawer с дополнительным атрибутом «direction» ..

Проверьте это: 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>

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

7 голосов
/ 12 сентября 2010

Класс по умолчанию SlidingDrawer не допускает этого. Вы можете использовать класс Panel здесь, чтобы получить нечто очень похожее: http://code.google.com/p/android-misc-widgets/

http://www.ohloh.net/p/android-misc-widgets

6 голосов
/ 29 июля 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...