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

Android 将(打开/关闭)按钮添加到(打开/关闭)导航抽屉的活动中,android,button,android-activity,drawer,Android,Button,Android Activity,Drawer,我目前正在android网站上学习导航抽屉,我正在使用他们的例子 我想要的是在main活动中添加一个按钮,它将能够打开NavigationDrawer。我需要以编程的方式来做,而不是用XML。我该怎么做?在MainActivity中创建一个包含抽屉布局的方法 public void open() { mDrawerLayout.openDrawer(Gravity.LEFT); } 从你的碎片中 在oncreateView()方法中,以编程方式在根布局中添加新按钮。您的片段有一个按钮

我目前正在android网站上学习导航抽屉,我正在使用他们的例子


我想要的是在
main活动中添加一个按钮,它将能够打开
NavigationDrawer
。我需要以编程的方式来做,而不是用XML。我该怎么做?

MainActivity
中创建一个包含抽屉布局的方法

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


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

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

Button button = new Button(this);
查找您的
抽屉布局

mDrawerLayout = (DrawerLayout) findViewById(R.id.my_drawer_layout_id);
在此按钮上设置一个
OnClickListener

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        mDrawerLayout.openDrawer(Gravity.LEFT);   
    }
)
这会给你一个空抽屉。如果要将
视图
放在抽屉内,请更换:

mDrawerLayout.openDrawer(Gravity.LEFT);
与:

如果希望按钮切换抽屉(如果抽屉打开,则关闭抽屉;如果抽屉关闭,则打开抽屉),请使用以下
OnClickListener

button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(Gravity.LEFT)) {
            mDrawerLayout.closeDrawer(Gravity.LEFT);
        } else {
            mDrawerLayout.openDrawer(Gravity.LEFT); 
        }  
    }
)
button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(myCustomView)) {
            mDrawerLayout.closeDrawer(myCustomView);
        } else {
            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); 
        }  
    }
)
button.setOnClickListener(new OnClickListener() {
    public void onClick(View view) {
        if (mDrawerLayout.isDrawerOpen(myCustomView)) {
            mDrawerLayout.closeDrawer(myCustomView);
        } else {
            mDrawerLayout.openDrawer(myCustomView); 
        }  
    }
)

但我如何添加按钮呢?作为回答,我没有在活动中添加按钮,而是在片段中添加按钮,所以您可以通过调用activity open()方法从任何片段和任何视图中访问抽屉,单击事件。为什么选择Gravity.LEFT?为什么不对呢?这真的相关吗,还是只需要一个int?不要问你——希望你能更好地理解。通常导航抽屉从左侧打开(如单击应用程序徽标左侧的图标)。查看标准的谷歌应用程序。但也可以打开导航。抽屉也从右边开始…(取决于需要)他想从应用程序的任何活动中打开抽屉。按钮仍然不存在seen@SartherisStormhammer可以发布布局xml文件吗?您在
setContentView()中使用的那个?