Вопрос по layout, android, android-widget, slidingdrawer – Как сделать так, чтобы Android SlidingDrawer выдвигался слева?

20

Я используюslidingDrawer в моем приложении этот обработчик размещен внизу в портретном режиме. Когда пользователь переключается в ландшафтный режим (широкоэкранный), я бы хотел, чтобы этот обработчик находился слева. Когда я меняю ориентацию с вертикальной на горизонтальную, обработчик помещается справа.

Я определил свой макет XML следующим образом:

<SlidingDrawer
    android:id="@+id/l_drawer"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:handle="@+id/l_handle"
    android:content="@+id/l_content"
    android:orientation="horizontal"
    android:layout_gravity="left"
    >

У кого-нибудь есть идея, как заставить его скользить слева направо?

На самом деле я нашел код, который реализует нечто подобное. Блог со скриншотами:androidblogger.blogspot.com/2009/01/sliding-drawer-again.html Обсуждение на форуме:anddev.org/viewtopic.php?p=16622 Код проверки из SVN:code.google.com/p/android-misc-widgets Vidar Vestnes
я также хочу внедрить ползунок ГОРИЗОНТАЛЬНО и проверил ссылку на SVN, но нет доступных проекта / кода Paresh Mayani
Нажмите на «Источник». в верхней части страницы, а затем нажмите кнопку «Обзор»; возможность показать исходный код. Adil Hussain

Ваш Ответ

4   ответа
30

что вам нужно сделать, это установить поворот на 180 & # xBA; для 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="horizontal"
    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>

Теперь посмотрите, что я изменил, чтобы оно выскользнуло слева.

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

Обратите внимание, что ротация уровня API 11+ (Honecomb)
Также обратите внимание, что SlidingDrawer устарел в API 17 (Android 4.2), так что, вероятно, лучше проверить себя в будущем и перейти от SlidingDrawer.
@ spaaarky21, я хочу сказать, что он не работает в 2.2 и 4.2, также, пожалуйста, предоставьте мне какое-нибудь решение для этой задачи.
Вы удивительный человек! Работает нормально. Я искал более 3 часов, чтобы найти лучшее решение и, наконец, к счастью, нашел ваше решение. :)
@ Кумар Не видя ваш код, я не могу сказать, почему он не работает для вас в 4.2. Что касается 2.2, если вы прочитаете комментарий Parth Mehrotra выше, вы увидите, что вращение не поддерживалось до Android 3. Как я уже сказал, вероятно, лучше полностью перейти от SlidingDrawer, поскольку вы не можете поворачивать ящик. до 3.0 и SlidingDrawer устарел в 4.2. Есть и другие вопросы о StackOverflow, которые обсуждают альтернативы.
6

SlidingDrawer исходный код, внесение в него изменений и использование вашей измененной версии. Вы так же не можете сделатьSlidingDrawer который спускается с вершины.

После более долгих поисков, я все еще не нашел каких-либо примеров или способов сделать это, так что да, я согласен, нет никакого способа сделать это с Android SDK ... Vidar Vestnes
0

Android SlidingDrawer сверху?

Предоставленное решение поддерживает установку ориентации Slidingdrawer в xml, также это просто, требует только 1 класса и некоторых дополнений в attrs.xml и стабильно, поскольку оно получено из Androids Slidingdrawer из SDK. Я также обсуждаю, почему я не выбрал другие популярные библиотеки / решения, найденные в Интернете / SO.

Quicklink to the gist: MultipleOrientationSlidingDrawer (источник и пример) @ gist

1

ытым исходным кодом. Мне потребовалась почти неделя, чтобы понять это правильно. Пожалуйста, проверьте мойSlidingTray вAniqroid библиотека с открытым исходным кодом для Android.

http://aniqroid.sileria.com/doc/api

Найдите ссылку на скачивание и документацию для класса SlidingTray в приведенной выше ссылке.

(Раскрытие информации: я поддерживаю проект.)

Я получаю исключение nullpointer при вызове SlidingTray. 11-13 16: 41: 51.980: E / AndroidRuntime (23438): вызвано: java.lang.reflect.InvocationTargetException
Я также получаю исключение нулевого указателя. java.lang.NullPointerException: com.sileria.android.view.SlidingTray.onLayout (неизвестный источник)

Похожие вопросы