我正在开发一个应用程序中,我必须在动作条中添加自定义布局。 添加自定义布局完成,但是当我加入的动作条我的自定义布局中的菜单项,改变它的位置从动作条的右侧的动作条的中心。 下面是我迄今所取得的图像。
我想是这样的动作条。
自定义布局(黄色按钮),在中间的动作条和菜单项的右侧大部分。
添加我的代码使用原生的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);
}
}
如何才能实现这一目标?
任何形式的帮助将不胜感激。
我假设你正在设置您的自定义视图操作栏中的自定义视图。 如果你正在使用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;
}
并从onCreate方法删除此
actionBar.setDisplayShowCustomEnabled(true);
cView = getLayoutInflater().inflate(R.layout.header, null);
actionBar.setCustomView(cView);
编辑:
如果您需要从您的自定义布局参考的意见,你可以在你做这个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;
}
只需使用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"/>
即便如此, 刷新项目是第一次来的XML文件,它不会是第一次。 但是, 搜索图标从左到右分辩在你的动作条将首先根据其orderInCategory属性。
菜单项的顺序将根据他们的,他们正在膨胀的XML文件中的顺序设置。
因此,所有你需要做的是改变的XML文件中的顺序,只要你喜欢。
实现这一目标的方法之一是通过调用invalidateOptionMenu并在onCreateOptionsMenu方法,把项目按照你希望把它们的顺序。
顺便说一句,如果你使用ActionBarSherlock,这种方法是可行的,所以忽略它的lint警告。