我在DrawerLayout中使用NavigationView(android.support.design.widget.NavigationView).我想知道当用户打开抽屉时是否还有以编程方式滚动特定项目.(同时在活动中调用onDrawerOpened())
例如,当用户打开抽屉时,我想在DrawerLayout(滚动到顶部)顶部的MenuItem"action_feedback".
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/action_current_list"
android:checked="true"
android:icon="@drawable/ic_current_list"
android:title="@string/current_list" />
<item
android:id="@+id/action_manage_lists"
android:icon="@drawable/ic_my_lists"
android:title="@string/my_lists" />
<item
android:id="@+id/action_search_products"
android:icon="@drawable/ic_search_black_24dp"
android:title="@string/search_products" />
<item
android:id="@+id/action_deals"
android:icon="@drawable/ic_product_promo"
android:title="@string/deals" />
</group>
<group android:id="@+id/nav_footer"
android:checkableBehavior="single">
<item
android:id="@+id/action_feedback"
android:icon="@drawable/ic_feeback"
android:title="@string/feedback" />
<item
android:id="@+id/action_sign_out"
android:icon="@drawable/ic_sign_out"
android:title="@string/sign_out" />
</group>
Run Code Online (Sandbox Code Playgroud)
之前我在DrawerLayout中使用了自定义布局(ScrollView + ListView),并且可以使用scrollView.scrollTo(x,y).
提前致谢.
实现 NavigationView 抽屉 - 我能够生成抽屉并查看它,但无法通过滑动关闭它。此外,NavigationItemSelectedListener 似乎未正确设置,因为我无法检测到项目上的单击事件。
MainActivity.java
private NavigationView navigationView;
private DrawerLayout navDrawerLayout;
private ListView navDrawerList;
private ArrayList<NavDrawerItem> navDrawerItemList;
private ActionBarDrawerToggle navDrawerToggle;
private void setupNavDrawer() {
this.navigationView = (NavigationView) findViewById(R.id.navigation_view);
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Utility.showDebugToast(String.valueOf(item.getItemId()));
if(item.isChecked()) {
item.setChecked(false);
} else {
item.setChecked(true);
}
navDrawerLayout.closeDrawers();
return true;
}
});
this.navDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
this.navDrawerList = (ListView) findViewById(R.id.left_drawer);
this.navDrawerItemList = new ArrayList<>();
this.navDrawerItemList.add(new NavDrawerItem("NAME", NavDrawerItemType.NAME));
this.navDrawerItemList.add(new NavDrawerItem("Create Mesh", NavDrawerItemType.CREATE_MESH));
this.navDrawerList.setAdapter(new NavDrawerAdapter(this, R.layout.drawer_item, R.id.drawer_tab_text, this.navDrawerItemList));
this.navDrawerToggle = new …Run Code Online (Sandbox Code Playgroud) 我想NavigationView在应用启动时检查一项。但是我发现NavigationView.setCheckedItem(R.id.xxx)没有工作。我也尝试过navigationView.getMenu().findItem(R.id.xxx).setChecked(true),同样的结果。
我已经将checkableBehavior设置为single。
<item android:title="@string/sliding_menu_group_places">
<menu>
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx" />
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/xxx" />
...
</group>
</menu>
</item>
Run Code Online (Sandbox Code Playgroud)
但是有一种方法可以工作:
drawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {
}
@Override
public void onDrawerOpened(View drawerView) {
navigationView.setChecked(R.id.xxx);
}
@Override
public void onDrawerClosed(View drawerView) {
}
@Override
public void onDrawerStateChanged(int newState) {
}
});
Run Code Online (Sandbox Code Playgroud)
导航项将在onDrawerOpened回调中进行检查。我在stackoverflow中进行了大量搜索,但没有一种方法适合我。谁能帮我这个忙。
编辑1
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
<group android:checkableBehavior="single">
<item
android:id="@+id/xxx"
android:icon="@drawable/xxx"
android:title="@string/recent_display_name" />
<item android:title="@string/sliding_menu_group_places">
<menu>
<group android:checkableBehavior="single"> …Run Code Online (Sandbox Code Playgroud) 我正在使用Android Studio模板进行抽屉导航.我想在抽屉的标题中添加一个click事件,但是当我尝试在onCreate()方法中找到ViewById时,我得到一个null异常.我猜它是因为它尚未膨胀.
有趣的是,drawer_layout上的findViewById 和nav_view返回了一个对象.我试着这样做:
drawer.findViewById;
Run Code Online (Sandbox Code Playgroud)
还有这个:
navigationView.findViewById;
Run Code Online (Sandbox Code Playgroud)
但这仍然是一个例外.
所以我的问题有两个:
MainActivity.java
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new …Run Code Online (Sandbox Code Playgroud) I have a NavigationView & rendering Menu inside it. My Menu has 3 groups & each contains few sub-menu items. My problem is, when I select any sub-menu item & goes to specific fragment. However, when I reopen NavigationView/drawer to select another item, it doesn't show last selected item Highlighted.
Currently, it just changes color of selected sub-menu item but I want it highlighted like below snapshot.
Base Activity 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" …Run Code Online (Sandbox Code Playgroud) android android-menu android-fragments navigation-drawer android-navigationview
navigationView.getHeaderView(0);我有一个导航抽屉,我可以通过访问和来更改字体、颜色等。
Menu m = navigationView.getMenu();
MenuItem mi = m.getItem(index);
Run Code Online (Sandbox Code Playgroud)
然后我就可以玩抽屉里的东西了。
但就我而言,我有一个文本视图,它是另一种布局:
<item
android:id="@+id/nav_wallet"
android:icon="@drawable/ic_balnce"
android:title="@string/my_wallet"
app:actionLayout="@layout/wallet_value"/>
Run Code Online (Sandbox Code Playgroud)
在我的 wallet_value 中,layout我有一个 textView,我需要更改其值,如下图所示:
我怎样才能得到这个布局并改变它?
android android-layout android-menu android-drawer android-navigationview
我已经尽我所能来实现这个功能,但失败了,“drawerLayout.setStatusBarBackground()”不起作用,“android:windowTranslucentStatus:true”不起作用。
在这里,第一张图片是我现在可以做的,第二张是想要的效果:
非常感谢。
android navigation-drawer android-styles android-statusbar android-navigationview
我正在使用导航视图、标签菜单和项目,我想在每个选项项目之间添加线条。这是我的菜单:
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools" />
</group>
Run Code Online (Sandbox Code Playgroud)
我不太清楚这个项目是如何工作的,也不知道为什么我们不能从 XML 中放入其他类别的标签。
当前状态:NavigationDrawer带有NavigationHeader和NavigationMenu项目.这些项目的数量很大,因此需要滚动才能访问底部的项目.
要求:当向下滚动到底部时,NavigationHeader应保持固定
这是我的activity_main布局文件
<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"
android:background="#00000000"
app:headerLayout="@layout/nav_header_main"
app:menu="@menu/activity_main_drawer"
/>
</android.support.v4.widget.DrawerLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的navigation_header_main布局文件
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:orientation="vertical"
android:background="#3d3b3b"
android:theme="@style/ThemeOverlay.AppCompat.Dark">
<android.support.v7.widget.AppCompatImageView
android:layout_width="match_parent"
android:layout_height="100dp"
android:src="@drawable/categories"
android:padding="1dp"
/>
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
PS我是android dev的新手.如果需要,请询问更多资源
免责声明:我已经检查了文档,因为2.1.0导航组件支持对话框片段。(https://developer.android.com/jetpack/androidx/releases/navigation#2.1.0)
DialogFragment尝试从 a 转到my时出现此错误Start Destination:
java.lang.IllegalStateException: Fragment PostDistressDialog{829f5d1} (bbbc4926-684b-491b-9772-e0f0ffebe0af)} not associated with a fragment manager.
PostDistressDialog是使用导航组件DialogFragment调用的JournalEntryFragment(可以在下面的地图中看到)。PostDistressDialog不是 的内部类JournalEntryFragment。它属于自己扩展的一类DialogFragment
public class PostDistressDialog extends DialogFragment implements ISaveDatabase {
...
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
if (getArguments()!=null) {
...
// Set up the Alert Dialog
AlertDialog.Builder alertDialog = new AlertDialog.Builder(getContext());
alertDialog.setTitle(R.string.distressed_levels);
alertDialog.setMessage(R.string.distressed_how_feel_post);
// Inflate and set the layout for …Run Code Online (Sandbox Code Playgroud) android android-fragments android-navigation android-navigationview