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

问题描述 投票:1回答:4

我想在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>
android user-interface android-actionbar
4个回答
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
投票
<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);
    }
}

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


0
投票

您可以为操作栏创建不同的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"); 
© www.soinside.com 2019 - 2024. All rights reserved.