Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
Log.i("frag", "onCreate");
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
setHasOptionsMenu(true);
final View view = inflater.inflate(R.layout.fragment_initiate_chat, container, false);
bindViews(view);
setUpClickListener();
setUpCategories(view);
return view;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
//menu.clear();
inflater.inflate(R.menu.menu_inititate_chat, menu);
Log.i("frag", "onCreateOptionsMenu");
//super.onCreateOptionsMenu(menu, inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Log.i("frag", "onOptionsItemSelected");
final int itemId = item.getItemId();
switch (itemId) {
case R.id.send:
sendIssue();
break;
}
return super.onOptionsItemSelected(item);
}
Run Code Online (Sandbox Code Playgroud)
我无法为我的片段设置菜单。我使用了 setHasOptionsMenu(true); 但它仍然没有任何区别。
我的片段 …
我想更改 Android 上弹出菜单中项目之间的间距
我希望有一个直接的解决方案,但据我所知android它不会那么简单
无论如何,我也想设置maxHeight我的弹出窗口...在这种情况下,弹出窗口由 TextView“选择奖品”锚定,因此它填充了其上方的空间,但并非所有项目都适合该空间,因此 android 会自动创建一个螺旋视图(垂直)
问题是,我知道 100% 的用户不会使用此卷轴,因此我的菜单中“旅行”下面的项目将永远不会被看到。
如何设置高度以便为所有项目留出足够的空间?
=============更新================
只是为了澄清,这不是一个旋转器,而是一个弹出菜单
this.popupCategories = new PopupMenu(this, this.categoryLabel);
for (Giveaway.GiveawayCategoryGroup catGroup : categoryGroups) {
SubMenu submenu = this.popupCategories.getMenu().addSubMenu(catGroup.getDescription(lang));
for (Giveaway.GiveawayCategory cat : (Collection<? extends Giveaway.GiveawayCategory>) catGroup.getCategories()) {
if (cat.isActive())
submenu.add(Menu.NONE, cat.getValue().hashCode(), (int) cat.getOrder(), cat.getDescription(lang));
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个主页,我在其中创建了自定义工具栏,现在我需要向其中添加菜单项。到目前为止,我已经成功,我的search图标处于app:showAsAction="always"模式(白色),但是当我在app:showAsAction="never"模式中添加任何内容时,菜单指示器(三个点)显示为黑色,但我希望它们是白色的。
AndroidManifest.xml
<activity
android:name=".HomePage"
android:launchMode="singleTask" />
Run Code Online (Sandbox Code Playgroud)
actvity_homepage.xml
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintVertical_bias="0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
app:titleTextColor="#ffffff"
style="@style/ToolbarTheme"
android:textAlignment="textStart"
android:background="#2B772E"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
Run Code Online (Sandbox Code Playgroud)
homepage_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:id="@+id/logoutmenu"
android:title= "Log Out"
android:icon="@drawable/logout"
app:itemIconTint = "#ffffff"
app:showAsAction="never"/>
<item
android:id="@+id/search"
android:icon="@drawable/search"
app:showAsAction="always"
android:title="Hello" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我想在Android中创建一个自定义的PopUp菜单,就像在附加的屏幕截图中一样.任何指针将不胜感激.
单击"选择名称"按钮,您会在按钮下方看到一个PopUp菜单.
Thaknks.
我需要通过长按选择访问ListView项中的文本.对于旧的Android版本,我已使用下面的代码成功完成了上下文菜单.
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.context_menu, menu);
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
String text = ((TextView) info.targetView).getText().toString();
switch (item.getItemId()) {
case R.id.getText:
getText(text);
return true;
default:
return super.onContextItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于较新的Android版本,我希望使用上下文操作栏执行此操作,但无法弄清楚如何在栏中选择项目后提取所选文本.以下代码不起作用.
myListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
myListView.setMultiChoiceModeListener(new MultiChoiceModeListener() {
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
String text = ((TextView) info.targetView).getText().toString();
switch (item.getItemId()) {
case R.id.contextDelete:
getText(text);
return true;; …Run Code Online (Sandbox Code Playgroud) 菜单/ activity_main.xml中:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:showAsAction="never" />
<item android:id="@+id/menu_save_log"
android:title="@string/menu_save_log"
android:showAsAction="never" />
</menu>
Run Code Online (Sandbox Code Playgroud)
MainActivity.java:
//@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_settings: // OK
break;
case R.id.menu_save_log: // menu_save_log cannot be resolved or is not a field
break;
}
return true;
}
Run Code Online (Sandbox Code Playgroud)
为什么menu_save_log无法识别?
附加信息.R.java:
public static final class menu {
public static final int activity_main=0x7f070000;
}
Run Code Online (Sandbox Code Playgroud)
R.java没有更新.为什么?
我们在正在进行的项目中有一个要求,我们需要在屏幕的上方空间和下方空间以反方向显示弧形样式的菜单项(将显示样本).我试图使用Path android应用程序中使用的ArcMenu演示中的一些代码,但我想出的是:

这不是我想要实现的,而是像下面的图像中的菜单.

我试图在过去4到5天内实现这一目标,但没有做到正确.如果有人对此类问题进行过任何研究,那么请指导我.
任何帮助将不胜感激.
我正在将我的应用程序迁移到最新的v7支持库,并提供材料设计支持.
我有一个简单的菜单,我希望在我的菜单中显示ActionBar.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/platformselect_button_settings"
android:icon="@drawable/ic_action_settings"
android:orderInCategory="1"
android:showAsAction="always"
android:title="@string/menu_settings"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
问题是showAsAction首选项被忽略,我必须做的是使其工作是强制onCreateOptionsMenu方法中的首选项:
@Override
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.platformselect_overflow_menu, menu);
for(int i = 0;i<menu.size();i++){
MenuItemCompat.setShowAsAction(menu.getItem(i), MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
}
return super.onCreateOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
难道我做错了什么?为什么忽略存储在XML中的首选项?
android android-appcompat android-menu android-support-library
我想在工具栏中打开android searchview而不点击搜索图标.这是XML代码
<item
android:id="@+id/action_search"
android:title="@string/search_title"
app:actionViewClass="android.support.v7.widget.SearchView"
app:showAsAction="always"/>
Run Code Online (Sandbox Code Playgroud)
和MainActivity中的Java代码.
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem menuItem = menu.findItem(R.id.action_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem);
searchView.setQueryHint("Type something...");
int searchPlateId = searchView.getContext()
.getResources()
.getIdentifier("android:id/search_plate", null, null);
View searchPlate = searchView.findViewById(searchPlateId);
if (searchPlate != null) {
searchPlate.setBackgroundColor(Color.DKGRAY);
int searchTextId = searchPlate.getContext()
.getResources()
.getIdentifier("android:id/search_src_text", null, null);
TextView searchText = (TextView) searchPlate.findViewById(searchTextId);
if (searchText != null) {
searchText.setTextColor(Color.WHITE);
searchText.setHintTextColor(Color.WHITE); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将特定的用户名设置为特定的菜单项,然后使用
LoggedUser = (String) menu.getItem(R.id.User).getTitle().toString();
Run Code Online (Sandbox Code Playgroud)
喜欢 :
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
menu.findItem(R.id.User).setTitle("username");
LoggedUse0r=(String) menu.getItem(R.id.User).getTitle().toString();
invalidateOptionsMenu();
return super.onPrepareOptionsMenu(menu);
}
Run Code Online (Sandbox Code Playgroud)
我宣布
invalidateOptionsMenu();
Run Code Online (Sandbox Code Playgroud)
用不同的方法
onCreate(), onStart(), onResume()
Run Code Online (Sandbox Code Playgroud)
但是,我的应用崩溃了,并给了我这个例外:
11-02 07:44:52.112 8714-8714 / com.example.prof_mohamedatef.listview E / AndroidRuntime:致命例外:main java.lang.IndexOutOfBoundsException:无效的索引2131492986,java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList)的大小为4 .java:251),位于com.example.android.support.v7.view.menu.MenuBuilder.getItem(MenuBuilder.java:729),位于java.util.ArrayList.get(ArrayList.java:304)。prof_mohamedatef.listview.Booking_hotels.onPrepareOptionsMenu(Booking_hotels.java:194)在android.app.Activity.onPreparePanel(Activity.java:2570)在android.support.v4.app.FragmentActivity.onPrepareOptionsPanel(FragmentActivity.java:532)在android .support.v4.app.FragmentActivity.onPreparePanel(FragmentActivity.java:521)在android.support.v7.view.WindowCallbackWrapper.onPreparePanel(WindowCallbackWrapper.java:93),位于android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java.support:1380)上的android.support.v7.app.AppCompatDelegateImplBase $ AppCompatWindowCallbackBase.onPreparePanel(AppCompatDelegateImplBase.java:355)上。 .appCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1633)在android.support.v7.app.AppCompatDelegateImplV9.access $ 100(AppCompatDelegateImplV9.java:93),位于android.os.Handler.dispatchMessage(Handler.java:android.os.Handler.handleCallback(Handler.java:725)的android.support.v7.app.AppCompatDelegateImplV9 $ 1.run(AppCompatDelegateImplV9.java:129) 92)在android.os.Looper.loop(Looper.java:137)在android.app.ActivityThread.main(ActivityThread.java:5283),位于java.lang.reflect.Method.invokeNative(本机方法),位于com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java.lang.reflect.Method.invoke(Method.java:511)处。 java:1102)位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)位于dalvik.system.NativeStart.main(本地方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)处java.lang.reflect.Method.invoke(Method.java:511)处的invokeNative(Native Method) dalvik.system.NativeStart.main上的os.ZygoteInit.main(ZygoteInit.java:869)(本机方法)com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)处java.lang.reflect.Method.invoke(Method.java:511)处的invokeNative(Native Method) dalvik.system.NativeStart.main上的os.ZygoteInit.main(ZygoteInit.java:869)(本机方法)内部的os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)在dalvik.system.NativeStart.main(本机方法)内部的os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1102)在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)在dalvik.system.NativeStart.main(本机方法)
任何人都可以告诉我获取项目标题的String与此类异常之间有什么关系:
IndexOutOfBoundsException:
Run Code Online (Sandbox Code Playgroud)
您的回复将不胜感激,在此先感谢
android ×10
android-menu ×10
popupmenu ×2
java ×1
menuitem ×1
resources ×1
searchview ×1
xml ×1