我在同一个活动中使用单个活动和多个片段(附加截图)来提供无缝导航.但在实现最新的工具栏和导航视图后,似乎很难处理导航和主页按钮.我遇到以下问题.
我已经尝试了一些事情,比如重写onBackPressed(),setHomeAsUpIndicator,手动弹出片段.早些时候我使用ActionBarDrawer切换来处理这个问题,但现在却以某种方式失败了.我检查了谷歌样本,他们似乎在大多数地方使用单独的活动.
任何人都可以指导我如何实现适当的后退导航来处理内部片段和页面标题中的NavigationView,Back按钮?我正在使用AppCompatActivity,android.app.Fragment,NavigationView和Toolbar.
android android-fragments navigation-drawer android-navigationview
我需要知道导航抽屉图标的正确尺寸(画板和内容).
它没有说明导航抽屉规格:http: //www.google.com.br/design/spec/patterns/navigation-drawer.html#navigation-drawer-specs
谢谢!
android navigation-drawer android-design-library android-navigationview
我已经改变了菜单项标题的问题Color在Navigation Drawer我设定的itemTextColor,但它只是改变了Color项目的不Title菜单.
这是我的 Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
tools:openDrawer="start">
<include
layout="@layout/app_bar_main"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
app:itemTextColor="#ffffff"
android:background="#283135"
/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
activity_main_drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@mipmap/hospital"
android:title="Home"
/>
<item
android:id="@+id/nav_reminder"
android:icon="@mipmap/alarm"
android:title="Reminders" />
</group>
<item android:title="Tools">
<menu>
<item
android:id="@+id/nav_settings"
android:icon="@mipmap/settings"
android:title="Settings" />
<item
android:id="@+id/nav_help"
android:icon="@mipmap/information"
android:title="Help" />
<item
android:id="@+id/nav_about"
android:icon="@mipmap/team"
android:title="About Us" …Run Code Online (Sandbox Code Playgroud) android colors menuitem navigation-drawer android-navigationview
这个问题的唯一答案对我不起作用,而不是将活动标题左侧的默认汉堡包图标更改,它只是在我的活动标题右侧添加了一个额外的汉堡包图标.
那么我该怎么做呢:
我一整天都在四处寻找,但却无处可去.
我看到Toolbar有一种setNavigationIcon(Drawable drawable)方法.理想情况下,我想使用layout(包含汉堡包图标和徽章视图)而不是a Drawable,但我不确定这是否可以实现 - 或者是否有更好的方法?
注意 - 这不是关于如何创建徽章视图的问题.我已经创建了它并在导航菜单项本身上实现了它.所以我现在只需要在默认的汉堡包图标上添加类似的徽章视图.
android badge navigation-drawer android-toolbar android-navigationview
在Android Studio中使用导航抽屉创建活动会导致其显示在XML代码中:
<android.support.v4.widget.DrawerLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
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"
tools:openDrawer="start">
Run Code Online (Sandbox Code Playgroud)
如果我删除了tools:openDrawer="start"布局预览,导航抽屉将关闭而不是打开.
我认为这是一个替换属性,类似于android:text可以替换tools:text为在布局预览中放置一些占位符文本.但是当我将其更改为android:openDrawer或时app:openDrawer,无法编译应用程序,因为它们是未知属性.
所以我想知道tools:openDrawer它是如何工作的,以及是否记录在任何地方.
android android-studio navigation-drawer android-navigationview android-tools-namespace
当使用菜单xml构建时,有没有办法减少NavigationView中图标和文本之间的空间?
我尝试android:drawablePadding使用该app:itemTextAppearance属性进行文本处理,但这不起作用,我已经尝试设置填充和边距,但没有任何作用.
此外,当我设置app:itemBackground并设置选中状态时,整个菜单项不会突出显示,我得到如下图所示的内容.
用于创建的xml itemBackground是:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@color/white_alpha_10" />
<item android:state_checked="true" android:drawable="@color/white_alpha_10" />
<item android:state_focused="true" android:drawable="@color/white_alpha_10" />
<item android:state_activated="true" android:drawable="@color/white_alpha_10" />
<item android:drawable="@android:color/transparent" />
</selector>
Run Code Online (Sandbox Code Playgroud)
知道会发生什么吗?显然菜单项上有背景颜色,但菜单xml非常符合标准.
在NavigationView它后面的紫色背景从主题设置:
<!--Activity xml -->
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:layout_gravity="start"
app:theme="@style/AppTheme.NavigationView"
app:menu="@menu/menu_nav_drawer"
app:itemBackground="@drawable/nav_drawer_item"
app:headerLayout="@layout/nav_header"/>
<!-- styles.xml -->
<style name="AppTheme.NavigationView" parent="Widget.Design.NavigationView">
<item name="android:background">@color/charcoal_new</item>
<item name="itemIconTint">@color/nav_drawer_icon</item>
<item name="android:listDivider">@color/dusk_alpha_50</item>
<item name="itemTextAppearance">@style/NavigationViewTextAppearance</item>
</style>
<style name="NavigationViewTextAppearance" parent="TextAppearance.Body.Regular">
<item name="android:textColor">@color/white</item>
<item name="android:padding">0dp</item>
<item name="android:layout_margin">0dp</item>
</style>
Run Code Online (Sandbox Code Playgroud)
我正在使用Android支持/设计库23.2.1.
我在我的应用程序中实现了一个导航视图,该视图是由我自动创建的AndroidStudio.NavigationDrawer Activity当我创建一个新项目并且菜单项看起来没问题时我拿起了,但是当我点击任何一个菜单项时没有任何事情发生.以下是我的onNavigationItemSelected()方法:
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Toast.makeText(MainActivity.this,"onNavigationItemSelected",Toast.LENGTH_LONG).show();
// Handle navigation view item clicks here.
item.setChecked(true);
int id = item.getItemId();
if (id == R.id.medicalRecord) {
Toast.makeText(MainActivity.this,id,Toast.LENGTH_LONG).show();
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Run Code Online (Sandbox Code Playgroud)
}
我的onCreate方法,我在其中创建NavigationView
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linear_layout);
if (babyImage.exists()) {
Drawable drawable = Drawable.createFromPath(Environment.getExternalStorageDirectory() + "/babycare/temp.jpg");
linearLayout.setBackground(drawable);
}
DrawerLayout drawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
drawerLayout.openDrawer(Gravity.LEFT);
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this); …Run Code Online (Sandbox Code Playgroud) 有没有办法以编程方式更改
导航抽屉中所选项目的项目颜色?
我能够使用app:itemTextColor,但问题是如果我使用它,
菜单项中的选中将不会突出显示.
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_home_black_24dp"
android:title="Home" />
<item
android:id="@+id/nav_search"
android:icon="@drawable/ic_search_black"
android:title="Search Location" />
<item
android:id="@+id/nav_fav"
android:icon="@drawable/ic_favorite"
android:title="Favorites" />
<item
android:id="@+id/nav_route"
android:icon="@drawable/ic_place"
android:title="Route" />
<item
android:id="@+id/nav_recent"
android:icon="@drawable/ic_nav_route"
android:title="Recent Location" />
</group>
<item android:title="Others">
<menu>
<item
android:id="@+id/nav_settings"
android:checked="true"
android:checkable="true"
android:icon="@drawable/ic_settings"
android:title="Settings" />
<item
android:id="@+id/nav_about"
android:icon="@android:drawable/ic_menu_send"
android:title="About" />
</menu>
</item>
</menu>
Run Code Online (Sandbox Code Playgroud) 我已经在我的Android应用程序的生产apk中获得以下1天的异常:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.a.b/com.a.b.c.d.HomeActivity}: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1654)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1670)
at android.app.ActivityThread.access$1500(ActivityThread.java:117)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3695)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:878)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:636)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.os.BadParcelableException: ClassNotFoundException when unmarshalling: android.support.v7.widget.RecyclerView$SavedState
at android.os.Parcel.readParcelable(Parcel.java:1958)
at android.os.Parcel.readValue(Parcel.java:1846)
at android.os.Parcel.readSparseArrayInternal(Parcel.java:2112)
at android.os.Parcel.readSparseArray(Parcel.java:1568)
at android.os.Parcel.readValue(Parcel.java:1903)
at android.os.Parcel.readMapInternal(Parcel.java:2083)
at android.os.Bundle.unparcel(Bundle.java:208)
at android.os.Bundle.getSparseParcelableArray(Bundle.java:1167)
at android.support.design.internal.NavigationMenuPresenter.onRestoreInstanceState(Unknown Source)
at android.support.v7.view.menu.i.dispatchRestoreInstanceState(Unknown Source)
at android.support.v7.view.menu.i.restorePresenterStates(Unknown Source)
at android.support.design.widget.NavigationView.onRestoreInstanceState(Unknown Source)
at android.view.View.dispatchRestoreInstanceState(View.java:6287)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1211)
at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:1215)
at …Run Code Online (Sandbox Code Playgroud) 我正在为我最近制作的应用程序写一些espressotests.我在DrawerLayout中使用NavigationView作为滑动菜单.
我设法以这种方式打开抽屉:
onView(withId(R.id.drawer_layout)).perform(open());
Run Code Online (Sandbox Code Playgroud)
这样做现在我正在尝试在NavigationView中的menuitem上执行单击.
onView(withId(R.id.nav_register))..
Run Code Online (Sandbox Code Playgroud)
找不到视图.我尝试了几件事,但我找不到检索menuitem视图的方法.这是在代码中分配项目的方式:
<android.support.design.widget.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer" />
Run Code Online (Sandbox Code Playgroud)
和activity_main_drawer.xml
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_home"
android:icon="@drawable/ic_menu_home"
android:title="Home" />
<item
android:id="@+id/nav_register"
android:icon="@drawable/ic_menu_register"
android:title="Registreer" />
<item
android:id="@+id/nav_login"
android:icon="@drawable/ic_menu_login"
android:title="Log in" />
<item
android:id="@+id/nav_play"
android:icon="@drawable/ic_menu_play"
android:title="Speel sessie" />
<item
android:id="@+id/nav_logout"
android:icon="@drawable/ic_menu_logout"
android:title="Log uit" />
</group>
Run Code Online (Sandbox Code Playgroud)
我读过一些关于NavigationViewMenuItem的东西是私有成员而且无法访问.有人可以帮我吗?
映入眼帘!Shenno