如何使 Android SlidingDrawer 从左侧滑出?

Posted

技术标签:

【中文标题】如何使 Android SlidingDrawer 从左侧滑出?【英文标题】:How to make an Android SlidingDrawer slide out from the left? 【发布时间】:2010-11-11 08:41:33 【问题描述】:

我在我的应用程序中使用slidingDrawer,它的处理程序在纵向模式下放置在底部。当用户切换到横向模式(宽屏)时,我希望处理程序位于左侧。当我将方向从垂直更改为水平时,处理程序放置在右侧。

我已经像这样定义了我的布局 XML:

<SlidingDrawer
    android:id="@+id/l_drawer"
    android:layout_
    android:layout_
    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 我也想实现水平滑块,我已经检查了 SVN 的链接,但是没有任何项目/代码可用 点击页面顶部的“源代码”选项卡,然后点击“浏览”选项以显示源代码。 【参考方案1】:

我找到了一个简单的方法来做到这一点。您所要做的就是为slidingDrawer、内容和手柄设置180º的旋转。 您可以类似地制作一个从顶部下降的 SlidingDrawer,就像我在 here 所做的那样。

看看我这里的例子,首先从右到左,以便能够看到差异。

<SlidingDrawer xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/slidingDrawer"
    android:layout_
    android:layout_
    android:orientation="horizontal"
    android:gravity="center_horizontal"
    android:handle="@+id/handle"
    android:content="@+id/content">
    <ImageView android:id="@+id/handle"
        android:layout_
        android:layout_
        android:src="@drawable/ic_launcher" />
    <ImageView android:id="@+id/content"
        android:layout_
        android:layout_
        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_
    android:layout_
    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_
        android:layout_>
        <ImageView android:id="@+id/imageView"
            android:layout_
            android:layout_
            android:src="@drawable/ic_launcher"
            android:rotation="180" />
    </LinearLayout>
    <ImageView android:id="@+id/content"
        android:layout_
        android:layout_
        android:background="#FF0000"
        android:src="@drawable/ic_launcher"
        android:rotation="180" />
</SlidingDrawer>

请注意,我还创建了一个 LinearLayout 来设置为句柄,并没有改变它的旋转,但我改变了它的子元素的旋转。这是为了防止我遇到一个小问题,但一切正常,而且很简单。

【讨论】:

你是个了不起的人!它工作正常。我搜索了 3 个多小时以找到最佳解决方案,最后幸运地找到了您的解决方案。 :) 注意旋转是 api level 11+ (Honecomb) 另请注意,SlidingDrawer 在 API 17 (Android 4.2) 中已被弃用,因此未来最好自己证明并从 SlidingDrawer 迁移出去。 @spaarky21,我想说它在 2.2 和 4.2 中也不起作用,所以请您提供任何解决方案来完成此任务 @Kumar 没有看到您的代码,我无法说明为什么它在 4.2 中不适合您。至于 2.2,如果您阅读上面 Parth Mehrotra 的评论,您会发现直到 Android 3 才支持旋转。就像我说的,完全从 SlidingDrawer 迁移可能会更好,因为直到 3.0 和 SlidingDrawer 才能旋转抽屉在 4.2 中已弃用。 *** 上还有其他问题可以讨论替代方案。【参考方案2】:

我认为您不能,除了获取SlidingDrawer 源代码,对其进行更改并使用您的修改版本之外。你同样不能创建一个从顶部下降的SlidingDrawer

【讨论】:

经过更多的谷歌搜索,我仍然没有找到任何示例或方法来做到这一点,所以是的,我同意,没有办法用 android sdk 来做到这一点......【参考方案3】:

我已经为此重写了一个类,并将其作为我的开源库的一部分。我花了将近一周的时间才把它弄好。请查看我在 Aniqroid Android 开源库中的 SlidingTray

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

在上面的链接中找到 SlidingTray 类的下载链接和文档。

(披露:我是该项目的维护者。)

【讨论】:

调用 SlidingTray 时出现空指针异常。 11-13 16:41:51.980:E/AndroidRuntime(23438):原因:java.lang.reflect.InvocationTargetException 我也得到一个空指针异常。 java.lang.NullPointerException:com.sileria.android.view.SlidingTray.onLayout(Unknown Source)【参考方案4】:

您可以使用此答案中发布的代码:Android SlidingDrawer from top?

提供的解决方案的特点是在 xml 中设置 Slidingdrawer 的方向,而且它很简单,只需要 1 个类和 attrs.xml 中的一些附加内容,并且稳定,因为它来自 SDK 的 Androids Slidingdrawer。我还讨论了为什么我没有选择在 Internet/SO 上找到的其他流行的库/解决方案。

快速链接到要点:MultipleOrientationSlidingDrawer (source & example) @ gist

【讨论】:

以上是关于如何使 Android SlidingDrawer 从左侧滑出?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中禁用 SlidingDrawer 后面的视图?

Android:Slidingdrawer.lock() 阻止其余布局的触摸输入

用于背景的 Android 圆角边缘

Android:在 Eclipse 的图形布局中打开滑动抽屉?

Android layout_width & layout_height,它是如何工作的?

Android项目实战_手机安全卫士流量统计