【问题标题】: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 中。我该怎么做?

【问题讨论】:

    标签: android button android-activity drawer


    【解决方案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()使用的那个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多