我想在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>
答案 0 :(得分:4)
阅读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>
答案 1 :(得分:1)
<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);
}
处理Click事件
@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);
}
}
答案 2 :(得分:0)
假设您正在使用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
答案 3 :(得分:0)
您可以为操作栏创建不同的xml布局,并使用按钮或文本 例如:
actiobar.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");
}