Anu*_*pam 14 android menuitem android-layout android-actionbar
我正在开发一个应用程序,我必须在操作栏上添加自定义布局.添加自定义布局已完成,但是当我在操作栏上添加菜单项时,我的自定义布局会将其从操作栏右侧的位置更改为操作栏的中心.下面是我到目前为止所获得的图像.

我在动作栏上想要这样的东西.

自定义布局(黄色按钮)位于操作栏的最右侧,菜单项位于中间.
添加我的代码以使用本机android操作栏实现此自定义布局:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
actionBar = getActionBar();
actionBar.setDisplayShowTitleEnabled(false);
actionBar.setDisplayUseLogoEnabled(false);
actionBar.setDisplayHomeAsUpEnabled(false);
actionBar.setDisplayShowCustomEnabled(true);
cView = getLayoutInflater().inflate(R.layout.header, null);
actionBar.setCustomView(cView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.websearch_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
default:
return super.onOptionsItemSelected(item);
}
}
Run Code Online (Sandbox Code Playgroud)
怎么能实现这一目标?
任何形式的帮助将不胜感激.
Ras*_*hid 14
只需orderInCategory在您的xml文件中使用它,它将从更少的数量到更大的数量(从操作栏的左侧)订购.如:
<item
android:id="@+id/Refresh"
android:icon="@drawable/ic_action_refresh"
android:showAsAction="ifRoom"
android:title="@string/refresh"
android:orderInCategory="2"/>
<item
android:id="@+id/Search"
android:icon="@drawable/ic_action_action_search"
android:showAsAction="ifRoom|collapseActionView"
android:title="@string/search"
android:orderInCategory="1"/>
Run Code Online (Sandbox Code Playgroud)
尽管如此,刷新项目首先出现在xml文件中,但它不会是第一个.但是,操作栏中从左到右的搜索图标将首先根据其orderInCategory属性.
我假设您正在将自定义视图设置为操作栏中的自定义视图。如果您使用的是 ActionbarSherlock,您可以将自定义视图添加为普通菜单项,并使用 为其设置操作视图.setActionView(yourCustomView or yourCustomLayoutId)。然后您可以设置.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS)显示视图。只需确保您的自定义视图设置为宽度wrap_content,否则它将把其他菜单项推离屏幕。如果没有 ActionbarSherlock,这也可能起作用,但我还没有在那里尝试过。
编辑:尝试修改你的onCreateOptionsMenu方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.websearch_menu, menu);
// add this
menu.add(Menu.NONE, 0, Menu.NONE, "custom")
.setActionView(R.layout.header)
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return true;
}
Run Code Online (Sandbox Code Playgroud)
并将其从 onCreate 方法中删除
actionBar.setDisplayShowCustomEnabled(true);
cView = getLayoutInflater().inflate(R.layout.header, null);
actionBar.setCustomView(cView);
Run Code Online (Sandbox Code Playgroud)
编辑:
如果您需要从自定义布局引用视图,您可以在您的onCreateOptionsMenu方法中执行此操作,如下所示(注意:我在浏览器中编写了此代码,因此不能保证我没有犯错或其他错误):
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// inflate the menu and add the item with id viewId,
// which has your layout as actionview
View actionView = menu.getItem(viewId).getActionView();
View viewFromMyLayout = actionView.findViewById(R.id.viewFromMyLayout);
// here you can set listeners to your view or store a reference
// to it somewhere, so you can use it later
return true;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39572 次 |
| 最近记录: |