我想创建一个全宽导航抽屉.设置layout_width为match_parenton @+id/left_drawer的宽度约为屏幕空间的80%.这似乎是标准行为.我一定要重写onMeasure()的DrawerLayout?
我目前的代码:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/black"
android:id="@+id/mainFragmentContainer">
</FrameLayout>
<include
android:id="@+id/left_drawer"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start"
layout="@layout/drawer"/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
谢谢.
我正在使用内置的导航抽屉来运行我的应用程序.我无法弄清楚如何处理后退按钮.当它被按下时,我希望它再次加载第一个片段.片段1.
因此,当应用程序启动时,您会看到Fragment1已启动.然后,他们可以点击片段2-5转到其他页面.在所有这些页面中,我希望使用后退按钮将用户带回Fragment1.用户应该能够通过后退按钮退出应用程序的唯一位置是Fragment1.
所有这些都是由FragmentActivity处理的,我试着弄乱那里的后门按钮.然而,我一直收到一个强制关闭错误:
(01-11 14:09:33.114: E/AndroidRuntime(8292): android.view.InflateException: Binary XML file line #7: Error inflating class fragment)
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
我确保将片段添加到后台堆栈中,如下所示:
fm.beginTransaction().replace(R.id.main, newFragment).addToBackStack("fragBack").commit();
Run Code Online (Sandbox Code Playgroud)
返回键:
@Override
public void onBackPressed() {
if (getSupportFragmentManager().findFragmentByTag("fragBack") != null) {
}
else {
super.onBackPressed();
return;
}
if (getSupportFragmentManager().getBackStackEntryCount() != 0) {
Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_LONG).show();
Fragment frag = getSupportFragmentManager().findFragmentByTag("fragBack");
FragmentTransaction transac = getSupportFragmentManager().beginTransaction().remove(frag);
transac.commit();
}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道我需要做什么?我是否需要在每个片段中调用onBackPressed(如果可能的话),而不是控制抽屉的FragmentActivity?在我过去的应用程序中,无论用户使用哪个片段,我都可以使用后退按钮关闭应用程序但是我现在正在制作的那个片段我希望后退按钮返回到Fragment1.
非常感谢一些帮助,谢谢.
onItemClick
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fragment newFragment = new MapsPage();
FragmentManager fm = getSupportFragmentManager(); …Run Code Online (Sandbox Code Playgroud) android android-fragments android-fragmentactivity navigation-drawer
我已经使用Android 5.0中的新工具栏实现了一个基本的ActionBarDrawerToggle.
但是,我无法弄清楚如何更改提供的默认汉堡包图标.从android文档中可以看出"给定的Activity将链接到指定的DrawerLayout,工具栏的导航图标将设置为自定义drawable ...这个drawable在抽屉关闭时显示汉堡图标,在抽屉打开时显示箭头当抽屉打开时,它会在这两个状态之间激活."
我目前使用以下代码正常工作,但是我想用我自己的drawable替换默认提供的汉堡包.
这是我目前的代码:
MainActivity.java
@InjectView(R.id.main_activity_toolbar)
Toolbar mToolbar;
@InjectView(R.id.main_activity_drawer_layout)
DrawerLayout mDrawerLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.main_activity);
super.onCreate(savedInstanceState);
setSupportActionBar(mToolbar);
mToolbar.setNavigationIcon(R.drawable.navigation);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, mToolbar, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
super.onDrawerClosed(view);
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
super.onDrawerOpened(drawerView);
invalidateOptionsMenu();
}
};
mDrawerLayout.setDrawerListener(mDrawerToggle);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);
}
Run Code Online (Sandbox Code Playgroud)
这一行:
mToolbar.setNavigationIcon(R.drawable.navigation);
Run Code Online (Sandbox Code Playgroud)
似乎不起作用.
这可能吗?谢谢!
ActionBarToggle文档 - https://developer.android.com/reference/android/support/v7/app/ActionBarDrawerToggle.html
我有一个简单的android.support.v7.widget.Toolbar,我想要做的就是按左上角的"汉堡包"图标打开一个NavigationDrawer."hamburger"按钮是可见的,当我从左侧开始拉动时,我看到按钮上的动画,但按下按钮不会像我期望的那样打开/关闭NavigationDrawer.我已经关注[Google文档] [1]但仍无法解决这个问题.很抱歉任何混淆,下面是我目前正在尝试使用的简化代码:
public class MainActivity extends AppCompatActivity implements
View.OnClickListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("NICK", "button button button..................");
}
});
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer);
NavigationView n = (NavigationView) findViewById(R.id.nav);
mDrawerLayout.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Log.d("NICK", "button button button..................");
}
});
//mDrawerLayout.setDrawerListener(mDrawerToggle);
n.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
switch …Run Code Online (Sandbox Code Playgroud) 我在我的应用程序中使用新的导航抽屉.这很棒,除了我没有找到一个简单的方法来设置抽屉的打开方式.默认行为是从屏幕左边缘拖动到打开.这很好,除非手机/桌子上有一个外壳并且手机的边缘无法触及.我想允许用户从屏幕的边缘触摸并向左拖动.这很容易使用其他导航抽屉库(滑动库)设置.不幸的是,我还没有看到谷歌的lib.
可以使用NavigationLayout的onTouchEvent()方法.当然,您可以收听所有触摸事件并触发openDrawer,但希望以更少的代码轻松实现.有任何想法吗?
我使用ActionBar在我的应用程序中创建了一个NavigationDrawer. 
如上图所示,我想将NavigationDrawer切换按钮图标更改为我想要的内容.我该怎么改变它?
这是我的代码: -
mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
// enabling action bar app icon and behaving it as toggle button
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
R.drawable.hamburger_button, //nav menu toggle icon
R.string.app_name, // nav drawer open - description for accessibility
R.string.app_name // nav drawer close - description for accessibility
) {
public void onDrawerClosed(View view)
{
getActionBar().setTitle(mTitle);
// calling onPrepareOptionsMenu() to show action bar icons
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
getActionBar().setTitle("Settings");
// calling onPrepareOptionsMenu() to hide action bar icons …Run Code Online (Sandbox Code Playgroud) 我有一个使用导航抽屉的应用程序,提供位置列表.在抽屉中,有几个选项(如选择国家,城市等),用户可以在主活动中显示相应列表之前进行设置.
用户关闭抽屉时是否有可能刷新列表,或者有其他方法可以解决这个问题?我试图搜索教程,但没有发现这个抽屉关闭监听器.任何建议都会有所帮助,谢谢!
如何使用按钮显示/隐藏导航抽屉,我已使用此 SO链接来创建和管理导航抽屉.
现在我正在使用(从左侧向右滑动 - 显示)和(从右向左滑动 - 隐藏)
如何使用下面屏幕截图中突出显示的按钮显示/隐藏抽屉:
header_home.xml:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/header_layout"
android:gravity="fill_horizontal"
android:layout_gravity="top|center">
<TextView
android:id="@+id/textHeader"
android:text="Home"
android:textColor="#ffffff"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/bg_header"
/>
<ImageButton
android:id="@+id/btnDrawer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:background="@drawable/icon_drawer"
android:contentDescription="@string/app_name"
/>
Run Code Online (Sandbox Code Playgroud)
编辑:
btnMenu.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
drawer.openDrawer(Gravity.LEFT);
}
});
Run Code Online (Sandbox Code Playgroud)
我知道要关闭我必须打电话drawer.closeDrawer(Gravity.LEFT);但我必须放置此代码?
当我点击我的抽屉切换时,我得到以下异常
java.lang.IllegalArgumentException:在重力下没有找到抽屉视图
这是我的activity_drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?attr/actionBarSize"
android:background="?attr/colorPrimary"/>
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<fragment
android:id="@+id/navigation"
android:layout_width="240dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:name="com.xyz.ui.navigation.NavigationFragment"
tools:layout="@layout/fragment_navigation" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
我的fragment_navigation.xml
<?xml version="1.0" encoding="utf-8"?>
<ListView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="start">
</ListView>
Run Code Online (Sandbox Code Playgroud)
还有我的清单项目
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Large Text"
android:id="@+id/navigation_item_text"
android:layout_gravity="center_horizontal" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud) 我创建了两个具有唯一ID的组(我需要一个分隔符),它们都checkableBehavior设置为单一.这允许同时检查来自不同组的多个项目,这正是我想要避免的.我想在所有群组中最多检查一件商品.
由于我还没有找到任何方法在XML中执行此操作,我尝试实现一个简单的逻辑onNavigationItemSelected来取消选中上一个菜单项:
if (previousItem != null)
previousItem.setChecked(false);
currentItem.setChecked(true);
Run Code Online (Sandbox Code Playgroud)
但setChecked(false)方法从来没有对我有用 - 项目保持检查.
这是我的示例代码:
menu_navigation.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/nav_group_1"
android:checkableBehavior="single">
<item
android:id="@+id/nav_feed"
android:title="@string/feed"/>
<item
android:id="@+id/nav_people"
android:title="@string/people"/>
</group>
<group
android:id="@+id/nav_group_2"
android:checkableBehavior="single">
<item
android:id="@+id/nav_settings"
android:title="@string/settings"/>
<item
android:id="@+id/nav_help_feedback"
android:title="@string/help_feedback"/>
<item
android:id="@+id/nav_logout"
android:title="@string/logout"/>
</group>
Run Code Online (Sandbox Code Playgroud)
NavigationItemSelectedListener:
mUiNavigationView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
if (previousItem != null)
previousItem.setChecked(false);
currentItem.setChecked(true);
//...
changeCurrentFragment(...);
return true;
}
});
Run Code Online (Sandbox Code Playgroud)
我需要一个提示!谢谢.
android android-support-library navigation-drawer material-design navigationview