如何在ActionBar中创建带图标和文字的按钮?

时间:2015-06-23 18:20:51

标签: android user-interface android-actionbar

我想在ActionBar中创建一个带有文本和图标的按钮。类似于下面的截图。 enter image description here

我已尝试过此代码。但它不起作用。它只显示没有文字的图标。

<?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>

4 个答案:

答案 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"); 
            }