ナビゲーションドロワーを使用してさまざまなフラグメントを開く1つのアクティビティを含むアプリを作成しました。アクションバーの引き出しトグルを持っていますが、あまり見えません。メインフラグメント(アプリの最初の起動時に表示されるフラグメント)のonCreateViewにボタンを配置した場合、アクティビティによって制御されるナビゲーションドロワーを開くにはどうすればよいですか?
これはうまくいくようです。答えは思ったよりもずっと簡単です。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View fragView = inflater.inflate(R.layout.mainmenu, container, false);
button1 = (Button) fragView.findViewById(R.id.button1);
mDrawerLayout = (DrawerLayout)getActivity().findViewById(R.id.drawer_layout);
mDrawerList = (ListView)getActivity().findViewById(R.id.left_drawer);
button1.setOnClickListener(this);
return fragView;
}
@Override
public void onClick(View v) {
mDrawerLayout.openDrawer(mDrawerList);
}
ご回答ありがとうございます。
スライドを開く必要がある場合:
mDrawerLayout.openDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
スライドを閉じる必要がある場合
mDrawerLayout.closeDrawer(Gravity.LEFT); //Edit Gravity.START need API 14
[〜#〜] example [〜#〜]
私のmDrawerLayoutはここにインスタンス化されています:
mDrawerLayout = (DrawerLayout)findViewById(R.id.my_drawer_layout);
私のスライドの状態:
mSlideState=false;
スライドメニューの状態(閉じた状態、開いた状態)を知る必要がある場合。このコードを使用してください:
mDrawerLayout.setDrawerListener(new ActionBarDrawerToggle(this,
mDrawerLayout,
R.drawable.ic_menu_slide,
0,
0){
@Override
public void onDrawerClosed(View drawerView) {
super.onDrawerClosed(drawerView);
mSlideState=false;//is Closed
}
@Override
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
mSlideState=true;//is Opened
}});
最後に。クリックイベントは次のように使用できます。
public void clickEventSlide(){
if(mSlideState){
mDrawerLayout.closeDrawer(Gravity.END);
}else{
mDrawerLayout.openDrawer(Gravity.END);
}}
私の場合、スライドメニューは右側(Gravity.END)にありますが、左側で必要な場合は、Gravity.START
isDrawerOpen()
を使用したはるかに簡単なソリューションがあります。
これにより、ドロワーの現在の状態(Opened/Closed)に基づいてナビゲーションドロワーが自動的に閉じたり開いたりします。
Button hamMenu = findViewById(R.id.ham_menu);
hamMenu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DrawerLayout navDrawer = findViewById(R.id.drawer_layout);
// If the navigation drawer is not open then open it, if its already open then close it.
if(!navDrawer.isDrawerOpen(Gravity.START)) navDrawer.openDrawer(Gravity.START);
else navDrawer.closeDrawer(Gravity.END);
}
});
Androidのデフォルトのナビゲーションアクティビティから使用している場合、ボタンのクリックリスナーにこのコードを追加するだけです--->
mDrawerLayout.openDrawer(Gravity.START);
閉じるためにあなたは何かをする必要はありません。
ツールバーをアプリバーとして適用するには、最初にアクティビティがAppCompatActivityから拡張されていることを確認します。次にsetSupportActionBar()を呼び出して、レイアウトからツールバーオブジェクトを渡します。
toolbar=(Toolbar) findViewById(R.id.toolbar_main);
setSupportActionBar(toolbar);
ActionBar actionbar = getSupportActionBar();
actionbar.setDisplayHomeAsUpEnabled(true);
actionbar.setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);
drawerLayout=(DrawerLayout)findViewById(R.id.drawer_layout);
ActionBarDrawerToggle actionBarDrawerToggle=new ActionBarDrawerToggle(this,drawerLayout,R.string.navigation_drawer_open,
R.string.navigation_drawer_close);
drawerLayout.addDrawerListener(actionBarDrawerToggle);
actionBarDrawerToggle.syncState();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case Android.R.id.home:
drawerLayout.openDrawer(GravityCompat.START);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
if (drawerLayout.isDrawerOpen(GravityCompat.START)){
drawerLayout.closeDrawer(GravityCompat.START);
}
else{
super.onBackPressed();
}
}
}
ここで説明するように、標準のコールバックモデルを使用します。
http://developer.Android.com/training/basics/fragments/communicating.html
ボタンを押すと、アクティビティへのコールバックを開始し、引き出しを開きます。
特定のイベントでドロワーを開閉するには、次の行を使用します。
_drawerLayout.openDrawer(Gravity.START);
_
_drawerLayout.closeDrawer(Gravity.LEFT);
_
→openDrawer(gravity_of_navigation_view_to_be_shown)
openDrawer( "gravity")、 "gravity"セクションでは、上記のようにナビゲーションビューの重力を入力する必要があります。
_Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END
_
それが最良の答えだと思います。