http://developer.Android.com/training/implementing-navigation/nav-drawer.html
このドキュメントによると、引き出しを右手側から実装できるかどうかについては言及していません。それも可能ですか? :(
引き出しのドキュメントは次のとおりです。左または右から引き出すように構成できるようです。
ドロワーの配置とレイアウトは、ドロワーを左または右から表示するビューのどちら側に対応する子ビューのAndroid:layout_gravity属性を使用して制御されます。 (または、レイアウトの方向をサポートするプラットフォームバージョンで開始/終了します。)
http://developer.Android.com/reference/Android/support/v4/widget/DrawerLayout.html
NavigationDrawerは、左、右、または両方から引き出すように構成できます。キーは、XML宣言でのドロワーの表示順序と、layout_gravity属性です。以下に例を示します。
<Android.support.v4.widget.DrawerLayout
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<FrameLayout
Android:id="@+id/content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:baselineAligned="false" >
</FrameLayout>
<!-- Left drawer -->
<ListView
Android:id="@+id/left_drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="left"
Android:choiceMode="singleChoice" />
<!-- Right drawer -->
<ListView
Android:id="@+id/right_drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="right"
Android:choiceMode="singleChoice" />
</Android.support.v4.widget.DrawerLayout>
「重力LEFTでドロワービューが見つかりません」エラーでアプリがクラッシュしました。
これをonOptionsItemSelectedに追加しました:
if (item != null && item.getItemId() == Android.R.id.home) {
if (mDrawerLayout.isDrawerOpen(Gravity.RIGHT)) {
mDrawerLayout.closeDrawer(Gravity.RIGHT);
} else {
mDrawerLayout.openDrawer(Gravity.RIGHT);
}
}
https://stackoverflow.com/a/21781710/437039 ソリューションに追加します。
Android Studioによって作成されたNavigation Drawerプロジェクトを使用している場合、onOptionsItemSelected
で状況が変わります。彼らは子クラスを作成したので、このコードを使用する必要があります
if (item != null && id == Android.R.id.home) {
if (mNavigationDrawerFragment.isDrawerOpen(Gravity.RIGHT)) {
mNavigationDrawerFragment.closeDrawer(Gravity.RIGHT);
} else {
mNavigationDrawerFragment.openDrawer(Gravity.RIGHT);
}
return true;
}
次。クラスNavigationDrawerFragment
では、3つのメソッドを作成する必要があります。
方法1
public boolean isDrawerOpen(int gravity) {
return mDrawerLayout != null && mDrawerLayout.isDrawerOpen(gravity);
}
方法2
public void closeDrawer(int gravity) {
mDrawerLayout.closeDrawer(gravity);
}
方法3
public void openDrawer(int gravity) {
mDrawerLayout.openDrawer(gravity);
}
今だけ、右側の引き出しが機能します。
マテリアルデザインのNavigationView
を使用できます。例:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v4.widget.DrawerLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/drawer_layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fitsSystemWindows="true"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent" />
<Android.support.design.widget.NavigationView
Android:id="@+id/nav_view"
Android:layout_width="wrap_content"
Android:layout_height="match_parent"
Android:layout_gravity="end"
Android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
</Android.support.v4.widget.DrawerLayout>
完全なチュートリアルについては、 http://v4all123.blogspot.in/2016/03/simple-example-of-navigation-view-on.html を参照してください。
これは古い質問ですが、まだ答えを探している人にとっては:
はい、可能です。以下のリンクで私の答えを確認してください:
次に、これらのコードを使用します@amalこれはあなたを助けると思います。 XML:
<!-- Framelayout to display Fragments -->
<FrameLayout
Android:id="@+id/frame_container"
Android:layout_width="match_parent"
Android:layout_height="match_parent" >
<RelativeLayout
Android:layout_width="match_parent"
Android:layout_height="48dp"
Android:background="@drawable/counter_bg" >
<ImageView
Android:id="@+id/iconl"
Android:layout_width="25dp"
Android:layout_height="wrap_content"
Android:layout_gravity="left"
Android:layout_marginLeft="12dp"
Android:layout_marginRight="12dp"
Android:src="@drawable/ic_launcher" />
<ImageView
Android:id="@+id/iconr"
Android:layout_width="25dp"
Android:layout_height="wrap_content"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true"
Android:layout_marginRight="17dp"
Android:src="@drawable/ic_launcher" />
</RelativeLayout>
</FrameLayout>
<!-- Listview to display slider menu -->
<ListView
Android:id="@+id/list_slidermenu"
Android:layout_width="240dp"
Android:layout_height="match_parent"
Android:layout_gravity="start"
Android:background="@color/list_background"
Android:choiceMode="singleChoice"
Android:divider="@color/list_divider"
Android:dividerHeight="1dp"
Android:listSelector="@drawable/list_selector" />
<ListView
Android:id="@+id/list_slidermenu2"
Android:layout_width="240dp"
Android:layout_height="match_parent"
Android:layout_gravity="end"
Android:background="@color/list_background"
Android:choiceMode="singleChoice"
Android:divider="@color/list_divider"
Android:dividerHeight="1dp"
Android:listSelector="@drawable/list_selector" />
//必要な画像を設定します
アクティビティコード:
ImageView iconl,iconr;
private DrawerLayout mDrawerLayout;
private ListView mDrawerList,mDrawerList2;
ImageView iconl,iconr;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
iconl = (ImageView)findViewById(R.id.iconl);
iconr = (ImageView)findViewById(R.id.iconr);
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerList = (ListView) findViewById(R.id.list_slidermenu);
mDrawerList2 = (ListView) findViewById(R.id.list_slidermenu2);
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
mDrawerList2.setOnItemClickListener(new SlideMenuClickListener());
iconl.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mDrawerLayout.openDrawer(Gravity.START);
mDrawerLayout.closeDrawer(Gravity.END);
}
});
iconr.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mDrawerLayout.openDrawer(Gravity.END);
mDrawerLayout.closeDrawer(Gravity.START);
}
});
}
}
ここで、両方のリストに独自のリストアダプターを設定し、項目をクリックしてdisplayView(position)を呼び出すことができます。フラグメントをフレームレイアウトに追加できるメソッド。
/**
* Diplaying fragment view for selected nav drawer list item
* */
private void displayView(int position) {
// update the main content by replacing fragments
Fragment fragment = null;
switch (position) {
case 0:
fragment = new HomeFragment();
break;
default:
break;
}
if (fragment != null)
{
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.frame_container, fragment).commit();
// update selected item and title, then close the drawer
mDrawerList.setItemChecked(position, true);
mDrawerList.setSelection(position);
mDrawerLayout.closeDrawer(mDrawerList);
} else {
// error in creating fragment
Log.e("MainActivity", "Error in creating fragment");
}
}
画面の右側からナビゲーションドロワーを設定するには、ナビゲーションビューのドロワーレイアウトを親にし、ナビゲーションビューのレイアウトの重力を右側に設定します。