2

シンプルなナビゲーション ドロワー レイアウトのセットアップがあります。デザイン サポート ライブラリを使用しているので、サポート ライブラリのツールバーの上にスライドするナビゲーション ビューが 1 つあります。ただし、ヘッダー レイアウトは UI のタップに応答しています。タップすると、ヘッダー レイアウトの背後に波及効果が表示されます。次のいずれかを行うにはどうすればよいですか。

  1. タップ操作をすべて無効にしますか? (波及効果はありません)
  2. タップ操作に応答します。

これに関するドキュメントが見つからないようです。

4

6 に答える 6

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
    }
});
于 2015-07-18T10:41:28.430 に答える
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 を追加できます。

于 2015-07-12T21:01:49.240 に答える
0

razzledazzle の投稿からヒントを得て、単に 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);
于 2015-08-13T09:30:53.067 に答える
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 ウィジェットの内部構造に依存することは推奨しませんが、この場合は、アプリにパッケージ化されて出荷されるサポート ライブラリです。長い目で見れば、独自のカスタム ナビゲーション ビューを作成する方がよいでしょうが、場合によっては簡単な修正が必要になることもあります。

于 2015-09-12T17:44:08.353 に答える