我有一个ImageView我附加到MenuItem它ActionView(项目出现在ActionBar).此视图的布局来自XML.我这样膨胀它:
ImageView actionView = (ImageView) layoutInflater.inflate(
R.layout.action_view_layout, null);
Run Code Online (Sandbox Code Playgroud)
这似乎工作正常.然而; root在调用中传递null inflate()使Lint对我大喊:
避免将null作为视图根传递(需要解析膨胀布局的根元素上的布局参数)
在我的具体情况下,我似乎可以在没有root的情况下进行管理,但我宁愿让代码尽可能正确.问题是,我不确定哪个View应该用作根.这个答案说它应该是"围绕想要膨胀的视图对象的小部件".但这意味着什么呢?动作栏的那一个?活动?还有别的吗?
更新:阅读答案让我怀疑我正确的做法是:
ActionBar View对应的MenuItemViewGroup这似乎有效.任何人都可以确认或否认这是否应该做什么?
我的应用程序中有新的导航抽屉,我想从代码中动态更改导航视图菜单项标题文本.我看了很多帖子,但我想不通,我怎么能这样做.我怎样才能正确实现这一目标?
MainActivity.java
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
}
Run Code Online (Sandbox Code Playgroud)
activity_main_drawer.xml
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item android:id="@+id/nav_camara" android:icon="@android:drawable/ic_menu_camera"
android:title="Import" />
<item android:id="@+id/nav_gallery" …Run Code Online (Sandbox Code Playgroud) 我正在使用启动主题_Underscores创建自定义Wordpress主题.我也使用Bootstrap作为前端框架.
我想修改wp_nav_menu,以便它分配当前菜单项class ="active"而不是class ="current-menu-item"(这是默认值).或者至少可以分配这两个类.我需要这个才能使用bootstrap.css中的.active类.
以下是我所拥有的示例(所有这些类都是wp生成的,请滚动查看我的意思):
<ul id="menu-main-menu" class="nav navbar-nav">
<li id="menu-item-14" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-13 current_page_item menu-item-14"><a href="">item1</a></li>
<li id="menu-item-12" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12"><a href="">item2</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
这就是我需要的:
<ul id="menu-main-menu" class="nav navbar-nav">
<li id="menu-item-14" class="active menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-13 current_page_item menu-item-14"><a href="">item1</a></li>
<li id="menu-item-12" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-12"><a href="">item2</a></li>
</ul>
Run Code Online (Sandbox Code Playgroud)
我更愿意以正确的方式做到这一点 - 不要想改变..wp-includes/nav-menu-template.php中的任何内容,当然,也不想使用js.
好吧,我在发布这个问题之前找到了答案(它已经准备就绪,这就是为什么它仍然形成的方式,好像我仍在寻找答案),但我很难找到它所以我决定将其发布为质量保证.我希望有人会觉得这很有用.
我想在 onCreateOptionsMenu方法外面扩展一个菜单对象(这意味着当用户没有按下按钮时创建/显示菜单),所以我需要创建一个菜单实例来将它传递给inflate方法.
这是我想要实现的一个例子:
Menu menu = // How to create an instance !?
new MenuInflater(context).inflate(R.menu.my_menu, menu)
Run Code Online (Sandbox Code Playgroud)
Menu是一个接口,所以我需要知道哪个类正在实现它.我确实浏览了Android代码以获取有关如何创建Menu对象的任何提示,但仍无法找到我要查找的内容.
编辑1
我的目标是onOptionsItemSelected(MenuItem item)从自定义视图中触发事件,该事件将由活动处理,因此我需要一个具有特定itemId和title的MenuItem对象以将其传递给事件.
如果我可以成功创建一个Menu对象,那么很容易获得它的子菜单MenuItems.
编辑2
我根本不想显示菜单,我想要的是使用菜单XML中定义的元素填充ListView,其中包含title,icon和itemId,每当单击ListViewItem时,我想触发在我处理的事件活动.onOptionsItemSelected(MenuItem item)
我知道我可以解析菜单XML以提取项目信息,但是如果onOptionsItemSelected(MenuItem item)不创建标准的 MenuItem对象来将其作为参数传递,我将无法触发.
任何帮助将不胜感激.谢谢!
我有一个带有png的图像文件夹.我想将一个MenuItem的图标设置为该png.我如何在程序代码中写这个?
许多菜单总是有一个项目相同.
有没有办法将该项目定义为额外菜单并将其包含在所有其他菜单中?
像这样的东西:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_main"
android:title="@string/text_mainmenu" />
</menu>
Run Code Online (Sandbox Code Playgroud)
<menu xmlns:android="http://schemas.android.com/apk/res/android"
parent="@menu/main">
<item android:id="@+id/menu_other"
android:title="@string/text_othermenu" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我知道,有可能以programmaticaly方式进行,但我认为xml-way更好.
我在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=".MainActivity">
<item
android:id="@+id/action_create_alarm"
android:icon="@drawable/ic_action_accept"
android:orderInCategory="100"
android:title="@string/menu_create_alarm"
app:showAsAction="ifRoom|withText" />
</menu>
Run Code Online (Sandbox Code Playgroud)
要么
<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=".MainActivity">
<item
android:id="@+id/action_create_alarm"
android:icon="@drawable/ic_action_accept"
android:orderInCategory="100"
android:title="@string/menu_create_alarm"
app:showAsAction="always|withText" />
</menu>
Run Code Online (Sandbox Code Playgroud)
要么
<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=".MainActivity">
<item
android:id="@+id/action_create_alarm"
android:icon="@drawable/ic_action_accept"
android:orderInCategory="100"
android:title="@string/menu_create_alarm"
app:showAsAction="withText" />
</menu>
Run Code Online (Sandbox Code Playgroud)
要么
<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=".MainActivity">
<item
android:id="@+id/action_create_alarm"
android:icon="@drawable/ic_action_accept"
android:orderInCategory="100"
android:title="@string/menu_create_alarm"
android:showAsAction="always|withText" />
</menu>
Run Code Online (Sandbox Code Playgroud)
我尝试以编程方式设置它
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
MenuItem item = menu.add(R.string.menu_create_alarm);
item.setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT|MenuItem.SHOW_AS_ACTION_IF_ROOM);
item.setIcon(R.drawable.ic_action_accept);
item.setOnMenuItemClickListener(
new OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
saveAlarm();
return …Run Code Online (Sandbox Code Playgroud) 我有以下Android Java和XML代码.我想更改我的应用程序的菜单项的字体.我只知道我们可以使用setTypeface更改TextView的字体,但无论如何都无法找到菜单项.
JAVA代码 - :
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh1:
Toast.makeText(this, "Item1 Selected", Toast.LENGTH_SHORT)
.show();
break;
case R.id.action_refresh2:
Toast.makeText(this, "Item2 Selected", Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud)
XML代码 - :
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/action_refresh1"
android:orderInCategory="100"
android:showAsAction="always"
android:title="Item1"/>
<item
android:id="@+id/action_refresh2"
android:orderInCategory="100"
android:showAsAction="always"
android:title="Item2"/>
</menu>
Run Code Online (Sandbox Code Playgroud)
我想更改两个菜单项的字体,但不知道如何为菜单项集成settypface.
我目前正在开发基于CMS的项目.
我正在使用erikras的通用反应redux样板
我真的需要处理动态路由的建议
让我们从样板中采取一个简单的场景......
在routes.js中
<Route path="about" component={About}/>
<Route path="login" component={Login}/>
<Route path="survey" component={Survey}/>
<Route path="widgets" component={Widgets}/>
Run Code Online (Sandbox Code Playgroud)
data.js
export const data = [
{id: 1, property: 'Dashboard', link: '/'},
{id: 2, property: 'Login', link: '/login'},
{id: 3, property: 'About Us', link: '/About'},
];
Run Code Online (Sandbox Code Playgroud)
现在,假设在用户角色的基础上,json数据中的属性将发生变化
让我们说新的财产:是
{id: 4, property: 'test page', link: '/test'}
Run Code Online (Sandbox Code Playgroud)
当react会呈现组件时,它如何知道路由链接......因为它没有在routes.js中定义
我没有得到正确的方法来实现它
我们需要根据用户角色由特定菜单内容组成的侧边栏.
假设我们正在建立预订系统,可以有不同的用户角色,如管理员,维护模式,助理角色.
因此,不同的角色将具有不同的属性,因此我们需要在其基础上生成菜单,因为属性肯定会根据用户角色而不同.
谢谢!!
我将我的MenuItem的ItemsSource绑定到我的ViewModel中的ObservableCollection.这是我的xaml:
<MenuItem Header="_View"
ItemsSource="{Binding Windows}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Header"
Value="{Binding Title}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
这部分很有用,但是现在我还想在同一个View MenuItem中添加一些静态MenuItem,用分隔符分隔.这样的东西,即使我知道这不起作用,因为我不能设置两次项目.
<MenuItem Header="_View"
ItemsSource="{Binding Windows}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Header"
Value="{Binding Title}" />
</Style>
</MenuItem.ItemContainerStyle>
<Separator />
<MenuItem Header="item 1" />
<MenuItem Header="item 2" />
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
现在我通过向MenuItem添加另一个级别来创建一个解决方法,如下所示:
<MenuItem Header="_View">
<MenuItem Header="Windows"
ItemsSource="{Binding Windows}">
<MenuItem.ItemContainerStyle>
<Style>
<Setter Property="MenuItem.Header"
Value="{Binding Title}" />
</Style>
</MenuItem.ItemContainerStyle>
</MenuItem>
<MenuItem Header="Load Layout" />
<MenuItem Header="Save Layout" />
</MenuItem>
Run Code Online (Sandbox Code Playgroud)
这很好用,但如果可能的话,我宁愿没有子菜单.哦,我也更喜欢在xaml而不是代码背后执行此操作.有任何想法吗?
menuitem ×10
android ×6
menu ×3
wpf ×2
actionview ×1
c# ×1
datatemplate ×1
icons ×1
react-router ×1
reactjs ×1
styles ×1
text ×1
wordpress ×1
xaml ×1