Switchをナビゲーションドロワーのアイテムの中に入れる必要があります。新しいデザインサポートライブラリを使用していますが、それが可能かどうかまったくわかりません。使用する場合
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を使用してみることもできます。私もこの方法を試していません。
答えはどれも完全ではないようですので、ここでさらに調査した後、私が思いついたのは次のとおりです。
drawer_switch.xml:
<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.SwitchCompat
xmlns:Android="http://schemas.Android.com/apk/res/Android"
Android:id="@+id/drawer_switch"
Android:layout_width="fill_parent"
Android:layout_height="match_parent" />
drawer_menu.xml:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto">
<item Android:title="@string/header">
<menu>
<item
Android:id="@+id/switch_item"
Android:icon="@drawable/ic_switch_item"
app:actionLayout="@layout/drawer_switch"
Android:title="@string/switch_item" />
</menu>
</item>
</menu>
DrawerActivity.Java:
SwitchCompat drawerSwitch = (SwitchCompat) navigationView.getMenu().findItem(R.id.switch_item).getActionView();
drawerSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
// do stuff
} else {
// do other stuff
}
}
});
DrawerActivity.Java:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
int id = item.getItemId();
if (id == R.id.switch_item) {
return false;
}
closeDrawer();
return true;
}
私はこのようなことをしました。
navigationView.getMenu().findItem(R.id.vibrate)
.setActionView(new Switch(this));
Switch vibrateSwitch =(Switch)
navigationView.getMenu().findItem(R.id.vibrate).getActionView();
vibrateSwitch.setChecked(true);
vibrateSwitch.setOnCheckedChangeListener(new
CompoundButton.OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean
isChecked){
SharedPreferences sharedPreferences =
getSharedPreferences(getString(R.string.MyPREFERENCES), MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(getString(R.string.VIBRATE), isChecked);
editor.commit();
}
});
はい、これは簡単に実行できます。実装できるようにコードを投稿します
<item Android:id="@+id/nav_item_1"
Android:title="Android"
Android:icon="@drawable/ic_Android_black_24dp"
Android:checked="true"/>
メインアクティビティのレイアウトは次のようになります。
<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"
tools:context=".MainActivity">
<LinearLayout
Android:id="@+id/main_content"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:orientation="vertical">
<Android.support.v7.widget.Toolbar
Android:id="@+id/app_bar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:background="@color/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
<TextView
Android:id="@+id/content_text"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_gravity="center"
Android:layout_marginTop="50dp"
Android:text="Your Content Goes Here"
Android:textAppearance="?android:attr/textAppearanceLarge"
Android:textColor="@color/colorAccent" />
<!-- your content layout -->
</LinearLayout>
<Android.support.design.widget.NavigationView
Android:id="@+id/menu_drawer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_gravity="start"
app:headerLayout="@layout/drawer_header"
app:menu="@menu/menu_drawer" />
そして、これがステップバイステップです デザインライブラリを使用したナビゲーションドロワーのチュートリアル
あなたはできるはずです。
ナビゲーションドロワービューはLinearLayout
にすることができ、その中にNavigationView
と別のViewGroup
を追加してスイッチを含めることができます。