アプリケーションにNavigationDrawerを正常に実装しました。
私のアプリは、画面の左側に開く引き出しを表示します。
私の問題は、左側にボタンを追加する必要があることです。そのボタンをクリックまたはスワイプすると、左の引き出しが開きます。私ができること。
しかし、ボタンはのように見えるになっているはずです。これは、画面にオーバーフローするドロワーの一部です。
つまり、引き出しが開閉すると同時にボタンがスライドします。
閉鎖状態:
開始状態
左のドロワーのレイアウトにボタンを追加してみましたが、境界線の外にものを表示することはできず、ドロワーを閉じると常に完全に非表示になります。
今、それを追加して、メインのDrawerLayoutにボタンを追加し、それを左の引き出しの右側に揃えるようにしています...しかし、うまくいきません... DrawerLayoutは、子を2つしか持てないようです。 。
任意の助けをいただければ幸いです。
サポートライブラリ(v4)を使用しています
[編集] APIレベル8をサポートしています... ImageView.setTranslationX
またはView.OnAttachStateChangeListener
は使用できません
Mobistry(SO pseudo)によって作成されたAniqroidライブラリのおかげで、これをかなり簡単に行う方法を見つけました
Android SlidingDrawerのコピーであるSlidingTrayクラスを使用していますが、画面の任意のコーナーに引き出しを配置できます。
Xmlを介して要素を宣言しました
<com.sileria.Android.view.SlidingTray
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer"
Android:layout_width="match_parent"
Android:layout_height="270dp"
Android:content="@+id/content"
Android:handle="@+id/handle" >
<ImageView
Android:id="@+id/handle"
Android:layout_width="320dp"
Android:layout_height="24dp"
Android:background="@drawable/tray_btn" />
<LinearLayout
Android:id="@+id/content"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"
Android:gravity="fill_vertical"
Android:orientation="vertical" >
</LinearLayout>
</com.sileria.Android.view.SlidingTray>
そしてただ電話をしなければならなかった
Kit.init(this);
メインActivity
でレイアウトを拡張する前に。
Aniqroid開発者に感謝します!
それはかなりトリッキーです。
これは、新しいGoogleマップアプリの引き出しハンドルに対して行われる処理と似ていると思います。わからない。 :)
Activity
コンテンツビューのエッジにとどまるトグルを作成しました。 DrawerLayout
がドラッグされると、最小の子(DrawerLayout
コンテンツビュー)からシャドウ(ある場合)を引いた量だけ、x軸のビューを変換しました。影付けされた+ DrawerLayout
のコンテンツビューは、引き出し全体の測定された幅全体を示します。
スライドしたオフセットと最小の子をすばやく乗算して、x変換を見つけます。
[編集:読みやすくするためにコードを削除し、以下のリンクに移動しました]
あなたの活動では:
_mDrawerToggle = new DrawerLayoutEdgeToggle(
this,
mDrawerLayout,
R.drawable.ic_launcher,
R.drawable.ic_launcher,
Gravity.LEFT,
true) {
@Override
public void onDrawerClosed(View view) {
super.onDrawerClosed(view); //must call super
}
@Override
public void onDrawerOpened(View view) {
super.onDrawerOpened(view); //must call super
}
@Override
public void onDrawerSlide(View view, float slideOffset) {
super.onDrawerSlide(view, slideOffset); //must call super
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
_
創造性の向上:ActionBarからハンドルまでのマージンとして設定できる距離などの外観を追加できます。
また、Y軸を平行移動するだけで、ハンドルを左/右に沿って上下に動かして、「シングルジッパー効果」を模倣できます。 :)
編集:これは私の GitHubで入手できます
編集2:ハンドルを取得できない場合は、最初にmDrawerToggle.setVerticalPostionOffset(0)
を使用してください。