13

ナビゲーション ドロワーのアイテム内にスイッチを配置する必要があります。新しいデザイン サポート ライブラリを使用していますが、それが可能かどうかがまったくわかりません。使用時

android:checkable

アイテムは完全に選択されているだけで、それは私が望むものではありません.

これは私が本当に欲しいもののスクリーンショットです。それを達成することは可能ですか?

ここに画像の説明を入力

4

8 に答える 8

27

ナビゲーション ドロワーのメニュー項目:

<item
    android:id="@+id/nav_item1"
    android:icon="@drawable/ic_item1"
    android:title="item1"
    app:actionLayout="@layout/layout_switch"
    />

およびそのアイテムのレイアウト:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.SwitchCompat
        android:id="@+id/drawer_switch"
        android:layout_width="fill_parent"
        android:layout_height="match_parent"
        android:text=""/>

</LinearLayout>

編集:

私は別のアプローチを使用することになりました。実際、ドロワー内のどのビューでも使用できることがわかったので、メニューに煩わされても意味がありません。通常の方法で (リスナーなどを使用して) ビューを作成し、ドロワーに追加するだけです。

于 2016-10-06T18:02:24.053 に答える
15

これを行う方法の 1 つは、必要な menuItem で setActionView を使用することです。

mNavigationView.getMenu().findItem(R.id.nav_connect)
        .setActionView(new Switch(this));

// To set whether switch is on/off use:
((Switch) mNavigationView.getMenu().findItem(R.id.nav_connect).getActionView()).setChecked(true);

スイッチの状態を変更するには、おそらくクリックリスナーも必要です。

mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(MenuItem menuItem) {

        switch (menuItem.getItemId()) {
            case R.id.nav_connect:
                ((Switch) menuItem.getActionView()).toggle();
                return true;
        }
    }
}

私は試していませんが、おそらくxmlで android:actionLayout="@layout/switch_layout" を使用して、作成したカスタムレイアウトを指すことができます。

また、もう少し堅牢性を提供する可能性のある ActionProvider を使用してみてください。私もこの方法は試していません。

于 2016-04-04T22:36:40.373 に答える
0

トグルに関してナビゲーションでスイッチを更新する必要がある場合は、チェックされたスイッチとチェックされていないスイッチの 2 つの異なるメニュー レイアウトを使用することをお勧めします。そのため、現在の状態を確認することで、ナビゲーション ドロワーを簡単に変更できます。

于 2020-06-22T09:09:32.580 に答える