将(打开/关闭)按钮添加到(打开/关闭)导航抽屉的活动
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如何使用工具栏中的按钮切换以使用片段打开/关闭导航抽屉