Java 更改菜单项可在用户单击时绘制
因此,我有以下配置:Java 更改菜单项可在用户单击时绘制,java,android,android-layout,android-menu,Java,Android,Android Layout,Android Menu,因此,我有以下配置: 一个附有选择器drawable的菜单项,我想根据用户的点击进行更改 然而,由于某些原因,我无法使其工作,因为我无法找到一种方法来比较图标(可绘制)。 我的配置附在下面: <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android
一个附有选择器drawable的菜单项,我想根据用户的点击进行更改
然而,由于某些原因,我无法使其工作,因为我无法找到一种方法来比较图标(可绘制)。 我的配置附在下面:
<?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:id="@+id/menu_grid_id"
android:icon="@drawable/grid_option"
android:title="@string/layout_type"
app:showAsAction="ifRoom" />
</menu>
我最终回答了自己的问题。也许它会帮助其他有同样问题的人
这个想法相对简单(如果你知道的话),就是使用开关或切换按钮
选项菜单如下所示:
<?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:id="@+id/menu_grid_id"
android:title="@string/layout_type"
// that was the difference
app:actionLayout="@layout/grid_option_layout"
app:showAsAction="ifRoom" />
</menu>
现在,可以使用ToggleButton或Switch。我最终使用了ToggleButton。可以在下面使用配置:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ToggleButton
android:id="@+id/switch_grid"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerVertical="true"
android:background="@drawable/grid_option"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:textOn="" />
</RelativeLayout>
现在,可绘制选择器如下所示(grid_选项):
当然,ic_grid_on和off是一些图像。是否希望在单击后永久应用新的drawable?是的,我想我找到了,我需要使用切换按钮。我还在读。
<?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:id="@+id/menu_grid_id"
android:title="@string/layout_type"
// that was the difference
app:actionLayout="@layout/grid_option_layout"
app:showAsAction="ifRoom" />
</menu>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ToggleButton
android:id="@+id/switch_grid"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_centerVertical="true"
android:background="@drawable/grid_option"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:textOn="" />
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_grid_on_32" android:state_checked="true" />
<item android:drawable="@drawable/ic_grid_off_32" /> <!-- default -->
</selector>