web-dev-qa-db-ja.com

Android SlidingDrawerを左からスライドアウトさせる方法は?

私は、縦長モードのときにハンドラーが下部に配置されているアプリケーションで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"
    >

誰もがそれを左から右にスライドさせる方法についてのアイデアがありますか?

20
Vidar Vestnes

おそらくSlidingDrawerソースコードを取得して変更し、変更したバージョンを使用する以外に、そうすることはできないと思います。同様に、上から下るSlidingDrawerを作成することはできません。

6
CommonsWare

それを行う簡単な方法を見つけました。必要なのは、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も作成しましたが、回転は変更しませんでしたが、その子の回転を変更しました。これは、私が抱えていた小さな問題を回避するためのものでしたが、すべてが正常に機能し、簡単です。

30
Leandroid

私はそれをクラスに書き直し、それを私のオープンソースライブラリの一部にしました。私はそれを正しくするのにほぼ一週間かかった。 Android用のAniqroidオープンソースライブラリにある私のSlidingTrayをチェックしてください。

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

上記のリンクで、SlidingTrayクラスのダウンロードリンクとドキュメントを見つけてください。

(開示:私はプロジェクトの管理者です。)

1
Sileria

この回答に投稿されたコードを使用できます: Android SlidingDrawer from top?

提供されるソリューションは、Slidingdrawerの向きをxmlで設定する機能も備えています。これは、1つのクラスのみを必要とするシンプルなもので、attrs.xmlにいくつかの追加があり、SDKのAndroids Slidingdrawerから派生しているため、安定しています。また、インターネット/ SOで見つかった他の人気のあるライブラリ/ソリューションを選択しなかった理由についても説明します。

要点へのクイックリンク: MultipleOrientationSlidingDrawer(ソースと例)@ Gist

0
patrickf