如何在主片段中单击按钮时打开导航抽屉?

     2023-04-15     117

关键词:

【中文标题】如何在主片段中单击按钮时打开导航抽屉?【英文标题】:How to open navigation drawer on button click in main fragment? 【发布时间】:2013-10-26 21:28:17 【问题描述】:

我制作了一个带有一个活动的应用程序,该活动使用导航抽屉打开许多不同的片段。我有操作栏抽屉切换,但它不是很明显。 如果我在我的主片段(我的应用首次启动时出现的片段)的 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);          

    

感谢您的回答。

【问题讨论】:

【参考方案1】:

如果您需要打开幻灯片:

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

【讨论】:

你可以考虑mDrawerLayout.isDrawerOpen(drawerView)而不是flag 我想要这个布局在我的视野之上。在这种情况下,布局正在向一侧移动。我该怎么办? 在您的 xml 中,默认情况下,最后(最底部)声明的视图将具有最高的 z-index(顶部),如果解决了问题,则应接受上述答案。 一切正常,但不推荐使用setDrawerListener 必须使用addDrawerListener【参考方案2】:

你应该使用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);
    
);

【讨论】:

您是在打开左侧抽屉并关闭右侧抽屉吗?否则为什么你在第一行使用gravity.start,在第二行使用gravity.end?还有为什么你同时使用 GravityCompat 和 Gravity?只是想知道我是否遗漏了什么,因为在文档中重力用于识别抽屉。 @A.Harkous 我没有打开左侧抽屉并关闭右侧抽屉。我使用 Gravity.START 和 Gravity.END 的目的是,当单击同一个按钮时,如果抽屉未打开,它将被打开,否则如果抽屉已经打开,它将关闭。这服务于使用相同按钮根据导航抽屉的当前状态关闭或打开导航抽屉的目的。是的,使用 GravityCompat 是一个错字。修复它【参考方案3】:

如果您在 android 中使用默认导航活动,您只需 将此代码添加到按钮的单击侦听器中--->

mDrawerLayout.openDrawer(Gravity.START);

关闭你不必做任何事情。

【讨论】:

这会导致汉堡菜单消失并被向上箭头取代。【参考方案4】:

使用这些行在某个事件上打开和关闭抽屉:

打开抽屉的代码sn-p:

drawerLayout.openDrawer(Gravity.START);

关闭抽屉的代码sn-p:

drawerLayout.closeDrawer(Gravity.LEFT);

openDrawer(gravity_of_navigation_view_to_be_shown)

在 openDrawer("gravity") 中,在 "gravity" 部分,您必须像上面给出的那样输入 Navigation View 的重力:

Gravity.LEFT
Gravity.RIGHT
Gravity.START
Gravity.END

我认为这是最好的答案。

【讨论】:

【参考方案5】:

要将工具栏应用为应用栏,首先确保您的活动从 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();
    

【讨论】:

如何使用导航抽屉打开和关闭更改按钮图像

】如何使用导航抽屉打开和关闭更改按钮图像【英文标题】:HowdoIchangemybuttonimagewithnavigationdraweropeningandclosing【发布时间】:2013-12-1307:26:55【问题描述】:我的导航片段有一个导航按钮,该按钮变为活动状态并在单击时打开一个... 查看详情

如何使向上按钮返回而不是打开导航抽屉

】如何使向上按钮返回而不是打开导航抽屉【英文标题】:HowtomakeUpButtongobackinsteadofopeningNavigationDrawer【发布时间】:2020-05-1816:46:52【问题描述】:我在我的应用程序中成功实现了一个导航抽屉,将菜单的每个项目链接到一个片... 查看详情

单击 ImageView 时如何打开滑动导航抽屉?

】单击ImageView时如何打开滑动导航抽屉?【英文标题】:HowtoopentheSlidingNavigationDrawerwhenImageViewisclicked?【发布时间】:2017-10-0204:16:30【问题描述】:我正在尝试在我的仪表板Activity上实现NavigationDrawerActivity。在我的应用程序中,我... 查看详情

导航抽屉活动:在按钮单击时从片段移动到片段

】导航抽屉活动:在按钮单击时从片段移动到片段【英文标题】:NavigationDrawerActivity:movefromfragmenttofragmentonbuttonclick【发布时间】:2020-12-2614:36:17【问题描述】:通过单击按钮从片段移动到另一个片段,会导致以下内容重叠。当... 查看详情

Android如何使用工具栏中的按钮切换以使用片段打开/关闭导航抽屉

】Android如何使用工具栏中的按钮切换以使用片段打开/关闭导航抽屉【英文标题】:Androidhowtogglewiththebuttonintoolbartoopen/closenavigationdrawerwithFragments【发布时间】:2015-07-0307:42:33【问题描述】:在阅读了这么多教程和文档并花了一些... 查看详情

抽屉打开并单击底部导航按钮时出现错误

】抽屉打开并单击底部导航按钮时出现错误【英文标题】:GettingerrorwhenDraweropenandClickonBottomNavigationbutton【发布时间】:2020-03-0915:35:40【问题描述】:我是Flutter的新手,下面是代码,如果抽屉打开并且我在“BottomNavigationBaronTap”... 查看详情

单击应用程序徽标除了打开导航抽屉外,还可以执行其他操作

...果用户单击应用程序徽标和标题,我想做一些其他逻辑。如何执行?此代码 查看详情

在导航抽屉项目单击时,导航抽屉中的新列表视图

】在导航抽屉项目单击时,导航抽屉中的新列表视图【英文标题】:Onnavigationdraweritemclick,newlistviewinnavigationdrawer【发布时间】:2015-09-1505:38:42【问题描述】:我试图在导航抽屉中获得以下功能,但我无法打破它。场景:-我有一... 查看详情

单击导航抽屉的项目不会打开片段

】单击导航抽屉的项目不会打开片段【英文标题】:ClickingonitemofNavigationDrawerdoesn’topenfragments【发布时间】:2020-01-1516:46:05【问题描述】:我想使用AndroidStudio(v.3.5)的默认导航抽屉活动。创建此默认活动(新项目->导航抽屉活... 查看详情

反应本机抽屉导航在按钮单击时不起作用

】反应本机抽屉导航在按钮单击时不起作用【英文标题】:Reactnativedrawernavigationnotworkingonbuttonclick【发布时间】:2018-10-1702:30:51【问题描述】:我为抽屉导航添加了一个代码,但它似乎不起作用。有人可以帮我解决这个问题吗?... 查看详情

如何从片段返回主要活动

】如何从片段返回主要活动【英文标题】:HowcanIgobacktomainactivityfromaFragment【发布时间】:2021-03-0415:33:09【问题描述】:我成功实现了底部导航抽屉并使用了片段。现在我可以从抽屉菜单中切换片段。我的问题是,当我从抽屉菜... 查看详情

android - 通过单击应用程序图标打开导航抽屉?

】android-通过单击应用程序图标打开导航抽屉?【英文标题】:android-opennavigationdrawerbyclickingtheappicon?【发布时间】:2013-11-2018:00:25【问题描述】:我在我的应用中使用导航抽屉(您通过从屏幕左侧滑动打开的导航类型)。现在,... 查看详情

导航抽屉片段 Sqlite

】导航抽屉片段Sqlite【英文标题】:NavigationDrawerFragmentsSqlite【发布时间】:2018-01-1608:12:45【问题描述】:我正在制作一个TODO应用程序。我有一个导航抽屉,其中包含工作、个人等项目。当您单击工作时,它会打开工作片段,您... 查看详情

带有许多片段的 Android 导航抽屉

】带有许多片段的Android导航抽屉【英文标题】:AndroidNavigationDrawerwithmanyfragments【发布时间】:2014-04-0512:16:41【问题描述】:我已经为此苦苦挣扎了一段时间,我想从我的问题的图表开始:三个导航抽屉按钮是我的基本活动的一... 查看详情

单击底部导航栏时关闭 Flutter 抽屉

】单击底部导航栏时关闭Flutter抽屉【英文标题】:CloseFlutterdrawerwhenbottomnavigationbarisclick【发布时间】:2020-07-2820:22:02【问题描述】:我有底部导航栏和抽屉。我希望抽屉在用户单击任何按钮导航图标时自动关闭。我不确定该怎... 查看详情

导航抽屉上的按钮单击

】导航抽屉上的按钮单击【英文标题】:NavigationDrawerOnButtonClick【发布时间】:2018-03-0207:44:52【问题描述】:我想在我的应用中有一个抽屉式导航我已经做了这个<?xmlversion="1.0"encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.... 查看详情

如何在 React-Navigation 中单击底部选项卡导航器时打开 DrawerNavigator?

】如何在React-Navigation中单击底部选项卡导航器时打开DrawerNavigator?【英文标题】:HowdoiopenDrawerNavigatoruponclickingBottomTabNavigatorinReact-Navigation?【发布时间】:2018-11-2520:53:54【问题描述】:我正在使用react-navigation并尝试在单击BottomTa... 查看详情

导航抽屉,处理后退按钮以转到以前的片段?

】导航抽屉,处理后退按钮以转到以前的片段?【英文标题】:Navigationdrawer,handlingthebackbuttontogotopreviousfragments?【发布时间】:2014-02-0107:36:12【问题描述】:我正在使用内置的导航抽屉来运行我的应用程序。我不太清楚如何处理... 查看详情