我想在ActionBar中创建带有文本和图标的按钮。如下屏幕截图所示。
我已经尝试过此代码。但这是行不通的。它仅显示没有文本的图标。
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/create"
android:title="@string/create"
android:icon="@drawable/ic_apply"
android:showAsAction="always|withText" />
</menu>
阅读Toolbar
由于工具栏基本上是一个ViewGroup,因此您可以添加子视图。一个例子:
<Toolbar
android:id = "@+id/myToolbar"
android:layout_height = "wrap_content"
android:layout_width = "match_parent"
android:minHeight = "?attr/actionBarSize"
android:background = "?attr/colorPrimary" >
<Button
android:layout_height = "wrap_content"
android:layout_width = "match_parent"
android:text = "My button"
android:layout_gravity = "right" />
</Toolbar>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- Search, should appear as action button -->
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
android:showAsAction="ifRoom" />
</menu>
如果您提到android:showAsAction="ifRoom"
它被视为操作栏按钮。
充气菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu items for use in the action bar
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
处理点击事件:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle presses on the action bar items
switch (item.getItemId()) {
case R.id.action_search:
openSearch();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
假设您正在使用AppCompat
:
您的问题可能类似于:https://stackoverflow.com/a/18262141/950427
确保输入正确的名称空间:xmlns:yourapp="http://schemas.android.com/apk/res-auto"
。
这里是文档中的示例:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:yourapp="http://schemas.android.com/apk/res-auto" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
yourapp:showAsAction="ifRoom" />
...
</menu>
来自文档的说明:
使用支持库中的XML属性,请注意,上面的showAsAction属性使用在标签。当使用由定义的任何XML属性时,这是必需的支持库,因为这些属性在旧设备上的Android框架。因此,您必须使用自己的名称空间作为支持库定义的所有属性的前缀。
文档:http://developer.android.com/guide/topics/ui/actionbar.html#ActionItems
您可以为操作栏创建不同的xml布局,并在其中使用按钮或文本。示例:
actionbar.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button" />
<TextView
android:id="@+id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="Enter Text"
android:textColor="#ffffff"
android:textStyle="bold"
android:textSize="@dimen/actionbar_title"/>
</LinearLayout>
在Java文件中使用actionbar.xml:
DisplayMetrics metrics = getResources().getDisplayMetrics();
ActionBar actionbar = getActionBar();
Drawable d=getResources().getDrawable(R.drawable.action2);
getActionBar().setBackgroundDrawable(d);
getActionBar().setIcon(android.R.color.transparent);
TextView title;
getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
getActionBar().setCustomView(R.layout.actiobar);
title= (TextView)findViewById(R.id.title);
title.setText("BUSINESS");