菜单下拉菜单中的“切换”按钮显示空白

时间:2019-02-06 19:40:55

标签: java android android-optionsmenu

我试图在选项菜单中添加一个Switch,但是由于某种原因而不是自定义布局,它显示了空白。

screen_on_menu_button.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Switch
        android:id="@+id/screen_on_switch"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:switchPadding="8dp"
        android:text="@string/menu_screen_on" />

</RelativeLayout>

menu.xml:

<item
    android:id="@+id/new_game_button"
    android:title="@string/menu_new_game"
    android:visible="true"
    app:showAsAction="always"
    android:icon="@drawable/ic_new_game"/>

<item
    android:id="@+id/change_names"
    android:title="@string/menu_change_names"
    app:showAsAction="never"/>

<item
    android:id="@+id/layout_change"
    android:title="@string/menu_change_layout"
    app:showAsAction="never"/>

<!--android:checkable="true" -->
<item
    android:id="@+id/keep_screen_on"
    app:actionLayout="@layout/screen_on_menu_button"
    app:showAsAction="never"
    android:title="" />

<item
    android:id="@+id/help_feedback"
    android:title="@string/menu_help_feedback"
    app:showAsAction="never"/>

<item
    android:id="@+id/about"
    android:title="@string/menu_about"
    app:showAsAction="never"/>

我尝试将app:actionLayout更改为android:app:actionLayout,删除相对布局,仅将开关保留在自定义xml中,它所做的就是在layout_change和{{之间添加一个空格。 1}}。 如果我将 showAsAction 设置为始终,它将显示在 ActionBar 中,但这不是我想要的。 另外,我可以选择删除开关并将菜单项设置为 checkable ,但这并不是故意的,大多数类似情况都提供了我已经实现的功能。

那么,如何将该开关集成到下拉选项菜单中?

1 个答案:

答案 0 :(得分:0)

您不能在下拉菜单中添加自定义布局。它仅接受#include <shlobj.h> #include <shlwapi.h> std::string GetDocumentsFolder() { std::string path; char szPath[MAX_PATH+1] = {}; if (SHGetFolderPathA(NULL, CSIDL_MYDOCUMENTS, NULL, SHGFP_TYPE_CURRENT, szPath) == S_OK) path = PathAddBackslashA(szPath); /* PWSTR pPath = NULL; if (SHGetKnownFolderPath(FOLDERID_Documents, KF_FLAG_DEFAULT, NULL, &pPath) == S_OK) { int wlen = lstrlenW(pPath); int len = WideCharToMultiByte(CP_ACP, 0, pPath, wlen, NULL, 0, NULL, NULL); if (len > 0) { path.resize(len+1); WideCharToMultiByte(CP_ACP, 0, pPath, wlen, &path[0], len, NULL, NULL); path[len] = '\\'; } CoTaskMemFree(pPath); } */ return path; } std::string GetAuthFilePath() { std::string path = GetDocumentsFolder(); if (!path.empty()) path += "Cheats\\Authorise.ini"; return path; } std::string authFile = GetAuthFilePath(); ... <item>。另一种选择是将<group><item>一起使用,并根据值更改默认的选中状态。
其他选项可以是

  1. 用PopupWindow替换菜单
  2. 使用android:checkable在操作栏中显示开关。