Как заставить Android SlidingDrawer выдвигаться слева?
-
16-09-2019 - |
Вопрос
я использую 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"
>
У кого-нибудь есть идеи, как заставить его скользить слева направо?
Решение
Я не думаю, что ты сможешь, кроме как, возможно, схватив SlidingDrawer
исходный код, внося в него изменения и используя модифицированную версию.Вы так же не можете сделать SlidingDrawer
который спускается сверху.
Другие советы
Я нашел простой способ сделать это.Все, что вам нужно сделать, это установить поворот на 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="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, чтобы установить его в качестве дескриптора, и не изменил его вращение, но я изменил вращение его дочернего элемента.Это было сделано для того, чтобы предотвратить небольшую проблему, которая у меня возникла, но все работает нормально и все просто.
Я переписал для него класс и сделал его частью своей библиотеки с открытым исходным кодом.Мне потребовалась почти неделя, чтобы все исправить.Пожалуйста, ознакомьтесь с моим Раздвижной лоток в Аникроид библиотека с открытым исходным кодом для Android.
http://aniqroid.sileria.com/doc/api
Найдите ссылку для скачивания и документацию для класса SlidingTray по ссылке выше.
(Раскрытие информации:Я являюсь куратором проекта.)
Вы можете использовать код, опубликованный в этом ответе: Android SlidingDrawer сверху?
Предоставленное решение позволяет настроить ориентацию Slidingdrawer в xml, а также оно простое, требует только 1 класса и некоторых дополнений в attrs.xml и стабильно, поскольку оно получено из Android Slidingdrawer из SDK.Я также обсуждаю, почему я не выбрал другие популярные библиотеки/решения, найденные в Интернете/SO.
Быстрая ссылка на суть: MultipleOrientationSlidingDrawer (источник и пример) @ gist