ActionBar是Android的窗口功能,可识别应用程序和用户位置,并提供用户操作和导航模式。
如何使用 Jetpack Compose 隐藏 ActionBar
我想隐藏默认操作栏,所以在清单文件中我有以下代码: </styl...</desc> <question vote="5"> <p>我想隐藏默认操作栏,所以在清单文件中我有以下代码:</p> <pre><code> <style name="Theme.MyCompose" parent="Theme.Material.DayNight.NoActionBar"> </style> <style name="Theme.Material.DayNight.NoActionBar" parent="@android:style/Theme.Material.Light.NoActionBar" /> </code></pre> <p>效果是这样的:</p> <p><a href="https://i.stack.imgur.com/l4J9H.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL2w0SjlILnBuZw==" alt=""/></a></p> <p>我想要实现的是这样的:</p> <p><a href="https://i.stack.imgur.com/q3md3.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL3EzbWQzLnBuZw==" alt=""/></a></p> <p>照片应覆盖白色区域。如何实现?</p> <p><strong>更新1</strong></p> <p>在实施具有半透明状态栏和伴奏插图支持的解决方案后,我遇到了奇怪的行为。当窗口标志设置如下时:</p> <pre><code> window.setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS ) </code></pre> <p>虽然有插图,但一切看起来都是这样的: <a href="https://i.stack.imgur.com/uHfhO.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL3VIZmhPLnBuZw==" alt=""/></a></p> <p>删除这些标志时,插图可以工作,但我有那个阴影:</p> <p><a href="https://i.stack.imgur.com/CoQle.png" target="_blank"><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tL0NvUWxlLnBuZw==" alt=""/></a></p> </question> <answer tick="true" vote="12"> <p>如果您需要完全隐藏状态栏,则需要使用全屏主题,如<a href="https://stackoverflow.com/a/25365193/3585796">这个答案</a></p>所示 <hr/> <p><a href="https://developer.android.com/jetpack/androidx/releases/compose-foundation#1.2.0-alpha03" rel="noreferrer">自从 </a> Compose <strong>1.2.0-alpha03</strong> 起,<strong>Accompanist Insets</strong> 大部分移至 Compose Foundation 中,请查看 <a href="https://google.github.io/accompanist/insets/#migration" rel="noreferrer">迁移指南</a> 了解更多详细信息。以下答案的主要变化是不再需要 <pre><code>ProvideWindowInsets</code></pre>,并且应该替换一些导入。</p> <hr/> <p>如果您需要透明状态栏,您可以按照<a href="https://stackoverflow.com/a/29311321/3585796">这个答案</a>,加上设置<a href="https://google.github.io/accompanist/insets/" rel="noreferrer">伴奏插图</a>进行如下撰写:</p> <pre><code>WindowCompat.setDecorFitsSystemWindows(window, false) window.setFlags( WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS ) </code></pre> <p>然后在撰写中,您可以使用 <pre><code>systemBarsPadding</code></pre> 和其他 <a href="https://google.github.io/accompanist/insets/" rel="noreferrer">Accompanist Insets</a> 修饰符将图像设置为背景并从状态/导航栏偏移。</p> <pre><code>setContent { ProvideWindowInsets { ComposePlaygroundTheme { Box { Image( painterResource(id = R.drawable.my_image), contentDescription = "...", contentScale = ContentScale.FillBounds, modifier = Modifier.fillMaxSize() ) Column( Modifier.systemBarsPadding() ) { Button(onClick = { /*TODO*/ }) { Text("Hello") } } } } } } </code></pre> <p>结果:</p> <p><img src="https://cdn.txt58.com/i/AWkuc3RhY2suaW1ndXIuY29tLzdlOUo4LnBuZw==" width="300"/></p> </answer> <answer tick="false" vote="0"> <p>有一个新的 <a href="https://developer.android.com/reference/androidx/activity/EdgeToEdge" rel="nofollow noreferrer">EdgeToEdge</a> 解决方案可以使您的系统栏(状态栏/导航栏)完全透明。</p> <p>确保您使用的 compose.activity 依赖项至少为 <strong>1.8.0</strong>:</p> <pre><code> implementation("androidx.activity:activity-compose:1.8.0") </code></pre> <p>将此代码添加到活动的 <strong>onCreate()</strong> 方法中:</p> <pre><code>override fun onCreate(savedInstanceState: Bundle?) { enableEdgeToEdge( statusBarStyle = SystemBarStyle.light( Color.TRANSPARENT, Color.TRANSPARENT ), navigationBarStyle = SystemBarStyle.light( Color.TRANSPARENT, Color.TRANSPARENT ) ) super.onCreate(savedInstanceState) } </code></pre> <p>您的根可组合项应该如下所示:</p> <pre><code> ... val view = LocalView.current if (!view.isInEditMode) { SideEffect { val window = (view.context as Activity).window window.statusBarColor = Color.Transparent.toArgb() WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = !darkTheme } } ... </code></pre> </answer> </body></html>
我编写了一个简单的菜单并将其添加到操作栏,但我不明白为什么它们在我的活动中不可见。 我正在使用 java 和 android studio,谢谢。 这是我的代码: @覆盖 公开
如果 setDisplayHomeEnabled 为 false,则不会显示 ActionBar 图标
我想在ActionBar上设置图标。 因此,当我将 setDisplayShowHomeEnabled 设置为 true 时,图标会显示,而 false 时则不会显示任何内容。我不想在操作栏上显示后退按钮,只显示图标。 有什么问题? ...
无法正确隐藏ActionBar Android Studio Giraffe
我正在使用 Android Studio Giraffe | 2022.3.1,我无法正确隐藏 ActionBar。 我看到了这个和这个相关的问题,但它们没有帮助我。 这是我的 MainActivity.kt 文件: 包com.
使用parent="@android:style/Widget.Holo.Light.ActionBar"带来深色ActionBar
这是我当前的样式文件,因为我想要一个带有浅色 ActionBar 的深色主题。 <item name="android:actionBarStyle">@...</desc> <question vote="2"> <p>这是我当前的样式文件,因为我想要一个带有浅色 ActionBar 的深色主题。</p> <pre><code><style name="AppBaseTheme" parent="@android:Theme.Holo"> <item name="android:actionBarStyle">@style/MyActionBar</item> </style> <style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">#FF00FF</item> </style> </code></pre> <p>工作正常,因为我的 ActionBar 作为粉红色背景(不在屏幕截图中共享,因为它太混乱了)。</p> <p>但是,不幸的是,尽管我使用了:Widget.Holo.<strong>Light</strong>.ActionBar,我的ActionBar仍然是深色主题:</p> <p><img src="https://cdn.imgupio.com/i/AWkuc3RhY2suaW1ndXIuY29tL0d5THZGLnBuZw==" alt="enter image description here"/></p> <p>如何在我的深色主题上强制使用 Light ActionBar?</p> </question> <answer tick="false" vote="0"> <p>这可能对你有帮助:</p> <pre><code><style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:actionBarStyle">@style/AppTheme.ActionBar</item> <item name="android:textAllCaps">false</item> </style> <style name="AppTheme.ActionBar" parent="@android:style/Widget.Holo.Light.ActionBar"> <item name="android:background">@drawable/actionbar_background</item> <item name="android:titleTextStyle">@style/AppTheme.ActionBar.Text</item> <item name="android:textColor">@color/white</item> </style> </code></pre> <p>在<pre><code><item name="android:background">@drawable/actionbar_background</item></code></pre>中,如果你想要渐变,你可以声明drawable xml,或者你可以直接在这里声明颜色值。</p> </answer> </body></html>
我需要知道 ActionBar 的确切大小(以像素为单位),以便应用正确的背景图像。
我正在尝试通过工具栏使用 Android Jetpack 设置指南。指南说根标签是 ,所以我不能在 xml 中包含工具栏。我正在使用 NoAct...
如何在片段中使用 MenuProvider 设置 NavigationUI?
我有一个与导航主机有关的活动,它使用 NavigationUI 处理导航。 在我的片段中,我有 optionsMenu 并且 setHasOptionsMenu(true) 已被弃用,而不是我使用
如何在删除徽标和设置标题时防止操作栏闪烁 程序化地 下面是我的 MainActivity.java 中的代码。这改变了动作 酒吧。但它首先显示...
我想在我的应用程序中使用 ActionBar,最小 sdk 设置为 7。我必须导入 android.support.v7.*; .但是当我导入我的应用程序时,在放置支持库之后,我看到了 v4 而不是 v7。我有下...
我同时实现了一个 DrawerNavigationView 和一个 BottomNavigationView,但问题是 ActionBar ......默认片段可以在这里输入图像描述但是改变片段它
我有一个包含两个片段的片段活动。当我在 Fragment 活动中通过 .setLogo(R.id.drawable) 函数设置徽标时,会出现徽标,但问题如下 当我创造了一个新的行为...
我试图通过单击 ActionBar(工具栏)中的汉堡包按钮打开 NavigationView。但是我已经卡在显示这个汉堡包图标的阶段了,因为谷歌
我正在使用本教程来实现 facebook 登录等。 Facebook登入 我在其中添加了新片段以显示朋友列表。现在,当我在新添加的片段上按下后退按钮时,它需要...
我想在没有自定义视图帮助的情况下将操作栏标题对齐到中心。我将不胜感激任何帮助。 不使用自定义视图,只修改默认操作栏标题
我尝试创建一个新的 Android 应用程序,并尝试使用行 requestWindowFeature(Window.FEATURE_NO_TITLE); 在 MainActivity 的构造函数中隐藏操作栏; 我以前做过...
背景 我在操作栏(实际上是工具栏)中有一个菜单项,单击该菜单项会显示可供选择的项目列表,类似于单选按钮: 背景 我在操作栏(实际上是工具栏)中有一个菜单项,单击该菜单项会显示可供选择的项目列表,类似于单选按钮: <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:icon="@drawable/..." android:title="@string/..." app:showAsAction="always"> <menu> <group android:id="@+id/..." android:checkableBehavior="single"> <item .../> <item .../> <item .../> </group> </menu> </item> </menu> 我需要在这个项目列表下面放一个项目,它和列表之间会有一个分隔线。类似于材料设计指南显示的内容(取自here): 编辑:这是我想做的草图: 问题 我找不到办法去做。 我试过的 我找到的唯一可能的解决方案是: 改变活动的主题(这里),但这也会影响活动的其他菜单项 方法在菜单项出现在操作栏上时在它们之间放置分隔线,但此处它们不会出现在工具栏本身上。它们出现在所选项目的弹出菜单上。 我试过在list和extra item之间放fake items,也试过放group,空group甚至各种属性都试过 遗憾的是没有任何效果。 问题 如何在操作项的弹出菜单的特定项之间添加分隔线? 也许我需要在单击操作项时创建自定义弹出菜单(如这里)?如果是这样,我如何在特定项目之间放置分隔线? 也许使用微调器作为行动项目? 你应该使用动作布局 <menu 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" tools:context=".LandingActivity"> <item android:id="@+id/action_cart" android:title="cart" android:actionLayout="@layout/cart_update_count" android:icon="@drawable/shape_notification" app:showAsAction="always"/> </menu> 然后动作布局可以有带分隔线的文本视图。 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <View android:id="@+id/divider" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/divider"/> <TextView android:id="@android:id/text" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:gravity="center_vertical" android:textAppearance="?attr/textAppearanceListItemSmall"/> </LinearLayout> 然后你可以在代码中添加点击监听器 从 SDK 版本 28 开始,您可以使用 menu.setGroupDividerEnabled(boolean)。如果您使用 ContextMenu 这仅在 SDK 28+ 上受支持,但是 MenuCompat 在 onCreateOptionsMenu() 中使用时提供向后兼容性。 这将在每个不同的groupId的动作之间添加一个分隔符,如下所示0和1: menu.add(0, getAdapterPosition(), action1, R.string.action1); menu.add(1, getAdapterPosition(), action2, R.string.action2); menu.setGroupDividerEnabled(true); // Or for MenuCompat < SDK 28: MenuCompat.setGroupDividerEnabled(menu, true); 文档在这里:https://developer.android.com/reference/android/view/Menu#setGroupDividerEnabled(boolean) 编辑:提问者要求的示例代码: 这是我目前在我的应用程序中使用的代码,位于 RecyclerView 适配器中。它也应该与您的菜单实现一起使用。由于您通过 XML 定义菜单,因此只要您引用菜单资源,下面的内容也适用于您。结果如下: Override onCreateContextMenu 或您菜单的相关onCreate.. 方法,如下所示: @Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { menu.setHeaderTitle(getStr(R.string.actions_title)); // Groups 0 and 1, first parameter for menu.add() menu.add(0, getAdapterPosition(), 0, R.string.homescreen); menu.add(0, getAdapterPosition(), 1, R.string.lockscreen); menu.add(0, getAdapterPosition(), 2, R.string.wpLocation_both); menu.add(1, getAdapterPosition(), 3, R.string.action_download); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { menu.setGroupDividerEnabled(true); // This adds the divider between groups 0 and 1, but only supported on Android 9.0 and up. } } 好的,我找到了一个很好的解决方法,但我不确定样式应该是这样的。这就是我所缺少的: 项目的背景位于微调器弹出窗口的背景之上,我不确定这是否是正确的放置方式。 我将支持库的白色背景用于微调器的弹出窗口。我认为应该有更好的方法让它变白。 我需要知道分隔线的正确样式是什么。现在我用了一个简单的 操作栏项目样式丢失。我只是用了一个简单的ImageView,我觉得应该不一样吧 出于某种原因,在某些 Android 版本(可能是 Lollipop 及更低版本)上,项目的背景看起来是黑色而不是白色。 微调器有时可能会遇到 setOnItemSelectedListener 问题,不确定何时。 主要活动 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_main, menu); final MenuItem item = menu.findItem(R.id.action_settings); final Spinner spinner = ((Spinner) MenuItemCompat.getActionView(item)); SimpleImageArrayAdapter adapter = new SimpleImageArrayAdapter(this); spinner.setAdapter(adapter); return true; } public class SimpleImageArrayAdapter extends ArrayAdapter<String> { private final String[] items = {"item 1", "item 2", "item 3", "extra item"}; public SimpleImageArrayAdapter(Context context) { super(context, 0); } @Override public int getCount() { return items.length; } @Override public String getItem(final int position) { return items[position]; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { View rootView = convertView == null ? LayoutInflater.from(getContext()).inflate(R.layout.spinner_item, parent, false) : convertView; TextView tv = (TextView) rootView.findViewById(android.R.id.text1); tv.setTextColor(0xff000000); tv.setText(items[position]); boolean isLastItem = position == getCount() - 1; rootView.findViewById(R.id.action_divider).setVisibility(isLastItem ? View.VISIBLE : View.GONE); rootView.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT)); return rootView; } @Override public View getView(int position, View convertView, ViewGroup parent) { //this is the view that's shown for the spinner when it's closed ImageView iv = new ImageView(getContext()); iv.setImageResource(android.R.drawable.ic_menu_add); int viewSize = getDimensionFromAttribute(MainActivity.this, android.support.v7.appcompat.R.attr.actionBarSize); iv.setLayoutParams(new ViewGroup.LayoutParams(viewSize, viewSize)); iv.setScaleType(ScaleType.CENTER_INSIDE); iv.setBackgroundResource(getResIdFromAttribute(MainActivity.this, R.attr.selectableItemBackground)); return iv; } } public static int getResIdFromAttribute(final Activity activity, final int attr) { if (attr == 0) return 0; final TypedValue typedValue = new TypedValue(); activity.getTheme().resolveAttribute(attr, typedValue, true); return typedValue.resourceId; } public static int getDimensionFromAttribute(final Context context, final int attr) { final TypedValue typedValue = new TypedValue(); if (context.getTheme().resolveAttribute(attr, typedValue, true)) return TypedValue.complexToDimensionPixelSize(typedValue.data, context.getResources().getDisplayMetrics()); return 0; } res/menu/menu_main.xml <menu 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" tools:context="com.example.user.myapplication.MainActivity"> <item android:id="@+id/action_settings" android:actionLayout="@layout/spinner" android:title="" app:actionLayout="@layout/spinner" app:showAsAction="always" /> </menu> res/layout/spinner_item.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/action_divider" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/divider"/> <TextView android:id="@android:id/text1" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/selectableItemBackground" android:gravity="center_vertical" android:minHeight="?attr/listPreferredItemHeightSmall" android:paddingEnd="?attr/listPreferredItemPaddingRight" android:paddingLeft="?attr/listPreferredItemPaddingLeft" android:paddingRight="?attr/listPreferredItemPaddingRight" android:paddingStart="?attr/listPreferredItemPaddingLeft" android:textAppearance="?attr/textAppearanceListItemSmall"/> </LinearLayout> res/layout/spinner.xml <?xml version="1.0" encoding="utf-8"?> <Spinner android:id="@+id/spinner" style="@style/SpinnerWithoutArrow" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" /> res/values/styles.xml <style name="SpinnerWithoutArrow" parent="@style/Widget.AppCompat.Spinner"> <item name="android:background">@null</item> <item name="android:popupBackground">@drawable/abc_popup_background_mtrl_mult</item> </style> res/drawable/divider.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <size android:height="1dp"/> <solid android:color="#FFff0000" /> </shape> 这可以通过使用弹出窗口和列表视图来完成。在您的列表视图中,您可以有不同的视图类型,例如菜单项和分隔线。 我列出弹出窗口部分的代码: LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.option_menu, null); ListView listView = (ListView) view.findViewById(R.id.listView); listView.setDivider(null); mAdapter = new OptionListAdapter(context, options); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { //TODO: The code when item is clicked. } }); mPopupWindow = new PopupWindow(context, null, R.attr.popupMenuStyle); mPopupWindow.setFocusable(true); // otherwise on android 4.1.x the onItemClickListener won't work. mPopupWindow.setContentView(view); mPopupWindow.setOutsideTouchable(true); int height = 0; int width = 0; float density = context.getResources().getDisplayMetrics().density; int minWidth = Math.round(196 * density); // min width 196dip, from abc_popup_menu_item_layout.xml int cellHeight = context.getResources().getDimensionPixelOffset(R.dimen.option_height); int dividerHeight = context.getResources().getDimensionPixelOffset(R.dimen.divider_height); final int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); final int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); for (int i = 0; i < mAdapter.getCount(); i++) { Object item = mAdapter.getItem(i); if (item != null) { View childView = mAdapter.getView(i, null, listView); childView.measure(widthMeasureSpec, heightMeasureSpec); height += cellHeight; width = Math.max(width, childView.getMeasuredWidth()); } else { height += dividerHeight; // divider } } width = Math.max(minWidth, width); Drawable background = mPopupWindow.getBackground(); // 9-pitch images if (background != null) { Rect padding = new Rect(); background.getPadding(padding); height += padding.top + padding.bottom; width += padding.left + padding.right; } mPopupWindow.setWidth(width); mPopupWindow.setHeight(height); mPopupWindow.setInputMethodMode(PopupWindow.INPUT_METHOD_NOT_NEEDED); 然后您可以使用以下方法显示弹出窗口: PopupWindowCompat.showAsDropDown(mPopupWindow, parent, x, y, gravity); 在列表视图的适配器中,您可以覆盖 getViewTypeCount() 和 getItemViewType() 以支持菜单项布局和分隔线布局,也可以添加您需要的任何视图类型。 这是我的应用程序中的快照: 在Material3 Design、MDC-Android中,制作各组菜单项,调用setGroupDividerEnabled(Boolean). 分隔符将插入组或菜单项之间。 MyActivity.kt private val binding by lazy { ActivityMyBinding.inflate(layoutInflater) } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) // other initializations.. // ... binding.toolbar.menu.setGroupDividerEnabled(true) } activity_my.xml <androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.appbar.AppBarLayout android:layout_width="match_parent" android:layout_height="wrap_content"> <com.google.android.material.appbar.MaterialToolbar <!-- Other properties --> android:id="@+id/toolbar" app:menu="@menu/main" /> </com.google.android.material.appbar.AppBarLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/item0" android:title="item0" app:showAsAction="never" /> <item android:id="@+id/item1" android:title="item1" app:showAsAction="never" /> <group android:id="@+id/group0"> <item android:id="@+id/item2" android:title="group0 item2" app:showAsAction="never" /> </group> <group android:id="@+id/group1"> <item android:id="@+id/item3" android:title="group1 item3" app:showAsAction="never" /> <item android:id="@+id/item4" android:title="group1 item4" app:showAsAction="never" /> </group> </menu> 我是这样做的: 参考截图: style.xml: <style name="popup" parent="Widget.AppCompat.ListView.DropDown"> <item name="android:divider">@color/colorPrimary</item> <item name="android:dividerHeight">1dp</item> <item name="android:textColor">@color/colorPrimary</item> <item name="android:itemBackground">@android:color/white</item> </style> <!-- Base application theme. --> <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> <!--- Customize popmenu --> <item name="android:dropDownListViewStyle">@style/popup</item> </style> Java代码: private void showPopup(View v) { Context wrapper = new ContextThemeWrapper(this, R.style.popup); PopupMenu mypopupmenu = new PopupMenu(wrapper, v); MenuInflater inflater = mypopupmenu.getMenuInflater(); inflater.inflate(R.menu.menu_patient_language, mypopupmenu.getMenu()); mypopupmenu.show(); mypopupmenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { txtPreferredLanguage.setText(item.getTitle().toString()); switch (item.getItemId()) { case R.id.menuEnglish: // Your code goes here break; case R.id.menuFrench: // Your code goes here break; } return false; } }); } 希望这对你有帮助。 对我有用的超级简单的解决方案: 为背景定义一个drawable: <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <solid android:color="@android:color/white"/> <stroke android:width="3dp" android:color="@color/colorPrimary"/> </shape> 然后在样式中使用背景: <style name="bluetooth_popup" parent="@android:style/Widget.DeviceDefault.Light.PopupMenu"> <item name="android:textColor">@color/colorPrimary</item> <item name="android:textStyle">bold</item> <item name="android:textAllCaps">true</item> <item name="android:background">@android:color/transparent</item> <item name="android:itemBackground">@drawable/bluetooth_popup_buttons</item> 现在: group1[ item0 item1 item2 ] group1[item3]; 改为: group1[ item0 item1] group1[item2 item3] 组有一个divider; 喜欢那组可以在divder之间加一个item; 如果divider不可用,试试background; 我从不使用menu; 这是我的猜测;
使用Holo主题的API级别> 14,我在ActionBar的图标上找回了众所周知的左边距外观,如下所示。 ...</root>
我有一个功能,我需要一个菜单项在SearchView展开时出现,在SearchView关闭时消失。我把展开时的菜单项设置为false,这使得 ...