Есть ли способ сделать слайдер слайда сверху вниз?
Android SlidingDrawer сверху?
Ответ 1
Класс SlidingDrawer
по умолчанию не позволяет этого. Вы можете использовать класс Panel
отсюда, чтобы получить что-то очень похожее:
http://code.google.com/p/android-misc-widgets/
Ответ 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