将(打开/关闭)按钮添加到(打开/关闭)导航抽屉的活动

Posted

技术标签:

【中文标题】将(打开/关闭)按钮添加到(打开/关闭)导航抽屉的活动【英文标题】:Add (open/close) button to activity for (opening/closing) the navigation drawer 【发布时间】:2013-07-25 01:19:47 【问题描述】:

我目前正在从 android 网站了解 Navigation Drawer,我正在使用他们的示例 http://developer.android.com/training/implementing-navigation/nav-drawer.html

我想要的是在MainActivity 中添加一个能够打开NavigationDrawer 的按钮。我需要以编程方式进行,而不是在 XML 中。我该怎么做?

【问题讨论】:

【参考方案1】:

MainActivity 中创建一个包含您的drawerLayout 的方法。

public void open()

    mDrawerLayout.openDrawer(Gravity.LEFT);

并从你的片段 在 oncreateView() 方法中,如您所愿,以编程方式在您的根膨胀布局中添加新按钮。您的片段有按钮 下面我修改了片段试试

 public static class PlanetFragment extends Fragment 
    public static final String ARG_PLANET_NUMBER = "planet_number";

    public PlanetFragment() 
        // Empty constructor required for fragment subclasses
    

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
        View rootView = inflater.inflate(R.layout.fragment_planet, container, false);
        int i = getArguments().getInt(ARG_PLANET_NUMBER);
        String planet = getResources().getStringArray(R.array.planets_array)[i];

        int imageId = getResources().getIdentifier(planet.toLowerCase(Locale.getDefault()),
                        "drawable", getActivity().getPackageName());
        ((ImageView) rootView.findViewById(R.id.image)).setImageResource(imageId);
        getActivity().setTitle(planet);
        RelativeLayout root=(RelativeLayout)rootView.findViewById(R.id.root);
        Button button=new Button(getActivity());            
        LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
        button.setLayoutParams(params);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        params.addRule(RelativeLayout.ALIGN_PARENT_TOP);
        button.setText("openDrawer");
        root.addView(button);

        button.setOnClickListener(new OnClickListener() 

            @Override
            public void onClick(View v) 
                // TODO Auto-generated method stub
                ((MainActivity)getActivity()).open();
            
        );
        return rootView;
    
    
 

您可以在片段中尝试此代码..

【讨论】:

但是如何添加按钮? 在回答中我没有在活动中添加按钮,而是在片段中,因此您可以通过调用活动打开()方法从任何片段和任何视图点击事件访问抽屉。 为什么选择 Gravity.LEFT?为什么不正确或其他?这真的相关还是你只需要一个int?不是在质疑你——希望得到更好的理解。 通常导航抽屉从左侧打开(如单击应用徽标左侧的图标)。查看标准的 Google 应用程序。但也可以打开导航。抽屉也从右边..(取决于需要) HI 希望从应用的任何活动中打开抽屉。【参考方案2】:

onCreate(Bundle) 方法中创建您的按钮:

Button button = new Button(this);

找到你的DrawerLayout

mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout_id);

在此按钮上设置OnClickListener

button.setOnClickListener(new OnClickListener() 
    public void onClick(View view) 
        mDrawerLayout.openDrawer(Gravity.LEFT);   
    
)

这会给你一个空抽屉。如果您想将View 放在抽屉内,请替换:

mDrawerLayout.openDrawer(Gravity.LEFT);

与:

mDrawerLayout.openDrawer(myCustomView);

如果您希望按钮切换抽屉(如果抽屉打开则关闭抽屉,或者如果抽屉关闭则打开它)使用以下OnClickListener

button.setOnClickListener(new OnClickListener() 
    public void onClick(View view) 
        if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) 
            mDrawerLayout.closeDrawer(Gravity.LEFT);
         else 
            mDrawerLayout.openDrawer(Gravity.LEFT); 
          
    
)

如果您使用自定义视图,请使用此OnClickListener

button.setOnClickListener(new OnClickListener() 
    public void onClick(View view) 
        if (mDrawerLayout.isDrawerOpen(myCustomView)) 
            mDrawerLayout.closeDrawer(myCustomView);
         else 
            mDrawerLayout.openDrawer(myCustomView); 
          
    
)

【讨论】:

按钮仍然无处可见 @SartherisStormhammer 你能发布你的布局xml文件吗?你在setContentView()使用的那个?

以上是关于将(打开/关闭)按钮添加到(打开/关闭)导航抽屉的活动的主要内容,如果未能解决你的问题,请参考以下文章

当按下后退按钮并打开导航抽屉时,我的应用程序关闭而不是关闭抽屉

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

如何默认导航抽屉在移动设备上关闭并在桌面上打开?

如何打开关闭应用程序后打开的最后一个片段并使用导航抽屉和导航组件重新打开它

Vuetify 导航抽屉开始关闭,然后一秒钟后打开

如何取消在颤动中打开和关闭导航抽屉的动画?