我有一个简单的导航抽屉布局设置。我正在使用设计支持库,所以我有一个导航视图,可以在支持库的工具栏上方滑动。但是,标题布局响应UI中的点击。当我点击它时,我的标题布局后面出现了涟漪效果。我该怎么做以下任何一种:
我似乎找不到任何关于此的文件。
答案 0 :(得分:2)
我注意到同样的问题。这个组件在内部使用ListView(下面称为menuView),遗憾的是没有选项可以禁用标题选择,因为它是硬编码的:
this.mHeader = (LinearLayout)this.mLayoutInflater.inflate(layout.design_navigation_item_header, this.mMenuView, false);
this.mMenuView.addHeaderView(this.mHeader);
this.mMenuView.setAdapter(this.mAdapter);
this.mMenuView.setOnItemClickListener(this);
除此之外,NavigationView还有一个图标着色错误(版本22.2.0),我建议暂时不要使用它。
答案 1 :(得分:1)
这可以解决此问题:
View headerView = getLayoutInflater().inflate(R.layout.header_nav, mNavigationView, false);
mNavigationView.addHeaderView(headerView);
//Use this if you don't want the click listener,
//be sure to use the appropriate background color
//((ViewGroup) headerView.getParent()).setBackgroundResource(R.color.background_material_light);
//If you want your header to respond to clicks, this should suffice
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Open to your implementation
}
});
答案 2 :(得分:0)
您可以覆盖布局资源" design_navigation_item_header"并添加背景颜色,然后你就看不到涟漪。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
android:orientation="vertical"
android:paddingBottom="@dimen/navigation_separator_vertical_padding"/>
如果您想响应点击,可以按ID查找视图并添加OnClickListener。
答案 3 :(得分:0)
从razzledazzle's post获取提示,只需使用onClick即可
View headerView = LayoutInflater.from(getActivity()).inflate(R.layout.drawer_header_view, menuItemsNavigationView, false);
headerView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Consume input from header view. This disables the ripple effect
}
});
menuItemsNavigationView.addHeaderView(headerView);
答案 4 :(得分:0)
我刚刚在自己的应用中处理过这个问题。 NavigationView是一个围绕ListView的ScrimInsetsFrameLayout,它显式忽略(抛出)列表中第一项(即标题)的点击。
但是,您可以通过将NavigationView的onItemClickListener与您自己的包装在一起来自行检索它们:
ListView menuList = (ListView) navigationView.getChildAt(0);
final AdapterView.OnItemClickListener nativeListener = menuList.getOnItemClickListener();
menuList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
if (position == 0) {
drawerLayout.closeDrawer(GravityCompat.START);
onUserClicked(prefs.getUser());
}
nativeListener.onItemClick(parent, view, position, id);
}
});
通常情况下,我不认可这种依赖于Android小部件内部的东西,但在这种情况下,它是支持库,它与您的应用程序打包在一起。从长远来看,建立自己的自定义导航视图可能更好,但有时需要快速修复!
答案 5 :(得分:0)
此页面上没有任何解决方案适用于我,可能有充分的理由。正如BladeCoder所接受的答案所述,侦听器被硬编码到NavigationDrawer ListView中,并且标题视图是ListView的Adapter的第0项。如果您想要实际禁用它,那么简单地覆盖膨胀的标题视图的onClickListener将不起作用,因为您需要为ListView的Adapter项而不仅仅是膨胀的视图引用onClickListener。
以下解决方案适用于我不允许点击/点击标题视图,但它不会禁用可聚焦性(例如使用d-pad或键盘)。我似乎无法弄清楚到底是怎么回事。
<?php
$id=16;
echo "<td><a class='btn btn-primary' href='edit_news.php?id=$id'><i class='fa fa-pencil fa-fw'></i> Edit</a></td>";
?>