Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改菜单项可在用户单击时绘制_Java_Android_Android Layout_Android Menu - Fatal编程技术网

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>