ナビゲーション ドロワーのアイテム内にスイッチを配置する必要があります。新しいデザイン サポート ライブラリを使用していますが、それが可能かどうかがまったくわかりません。使用時
android:checkable
アイテムは完全に選択されているだけで、それは私が望むものではありません.
これは私が本当に欲しいもののスクリーンショットです。それを達成することは可能ですか?
ナビゲーション ドロワーのアイテム内にスイッチを配置する必要があります。新しいデザイン サポート ライブラリを使用していますが、それが可能かどうかがまったくわかりません。使用時
android:checkable
アイテムは完全に選択されているだけで、それは私が望むものではありません.
これは私が本当に欲しいもののスクリーンショットです。それを達成することは可能ですか?
ナビゲーション ドロワーのメニュー項目:
<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>
編集:
私は別のアプローチを使用することになりました。実際、ドロワー内のどのビューでも使用できることがわかったので、メニューに煩わされても意味がありません。通常の方法で (リスナーなどを使用して) ビューを作成し、ドロワーに追加するだけです。
これを行う方法の 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 を使用してみてください。私もこの方法は試していません。
トグルに関してナビゲーションでスイッチを更新する必要がある場合は、チェックされたスイッチとチェックされていないスイッチの 2 つの異なるメニュー レイアウトを使用することをお勧めします。そのため、現在の状態を確認することで、ナビゲーション ドロワーを簡単に変更できます。