簡體   English   中英

如何在主片段中單擊按鈕打開導航抽屜?

[英]How to open navigation drawer on button click in main fragment?

我制作了一個帶有一個活動的應用程序,該活動使用導航抽屜打開許多不同的片段。 我有 actionbar drawertoggle,但它不是很明顯。 如果我在我的主要片段(我的應用程序首次啟動時出現的片段)的 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

例子

我的 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()

下面的一段代碼根據抽屜的當前狀態(打開或關閉)自動關閉或打開導航抽屜

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);

關閉你不必做任何事情。

使用這些行在特定事件中打開和關閉抽屜:

打開抽屜的代碼片段:

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

我認為這是最好的答案。

要將工具欄應用為應用欄,首先確保您的活動從 AppCompatActivity 擴展。 然后調用 setSupportActionBar() 並從布局中傳遞 Toolbar 對象:

    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

當您按下按鈕時,啟動對活動的回調並讓它打開您的抽屜。

我認為最簡單的方法

   @Override
    public void onBackPressed() {
        if(mDrawerLayout.isDrawerOpen(findViewById(R.id.navigationViewId))){
            mDrawerLayout.closeDrawer(Gravity.LEFT);
        }else
        super.onBackPressed();
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM