如何:动态更改操作按钮图标或放入文本

时间:2016-07-18 15:00:58

标签: android android-actionbar

我是android编程的新手,我正在尝试在ActionBar上创建一个计数器(在我的工具栏中)。 我已经添加了背景(一个圆圈),但现在我需要输入一个由于按钮而减少的下一个(数字)。 抱歉我的英文不好,我希望有人可以帮助我,我只需要一个代码库就可以开始工作了。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/mex_box"
    android:icon="@drawable/ic_brightness_1_black_36dp"
    android:orderInCategory="100"
    android:title="@string/mex_counter"
    android:visible="true"
app:showAsAction="ifRoom" />

<item
android:id="@+id/users_list"
android:icon="@drawable/ic_people_black_36dp"
    android:title="@string/contacts_list"
    android:orderInCategory="100"
    android:visible="true"
    android:clickable="true"
    app:showAsAction="ifRoom"/>
</menu>

MainActivity:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    menu.clear(); // clears all menu items..
    getMenuInflater().inflate(R.menu.main_action_menu, menu);
    return true;
}

3 个答案:

答案 0 :(得分:0)

试试这个:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); // use whatever id you have for your toolbar
setSupportActionBar(toolbar);

然后在按钮的onClickListener中设置您需要的任何数字作为标题:

getSupportActionBar().setTitle("" + number - 1);

答案 1 :(得分:0)

您好使用此功能,其中 resId 是您的可绘制ID:

public void setHomeAsUpIndicator(int resId) {
    if (getSupportActionBar() != null)
        getSupportActionBar().setHomeAsUpIndicator(resId);
}

答案 2 :(得分:0)

你手上有两个问题。首先是在圆圈或气泡中显示文字。其次,您希望能够在Toolbar(或ActionBar)中显示该文字,并能够更改文字。

要解决您的第一个问题,我建议您创建ShapeDrawable

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">

    <solid android:color="#FF000000" />
    <corners android:bottomRightRadius="8dp"
        android:bottomLeftRadius="8dp"  
        android:topRightRadius="8dp"
        android:topLeftRadius="8dp"/>

</shape>

您可能需要弄乱8dp的半径,使其看起来更圆,但无论文本有多长,这都将允许视图扩展。最后,创建一个使用此ShapeDrawable作为背景的布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" android:layout_height="wrap_content"
    android:textSize="12sp" android:textColor="?android:attr/textColorPrimary"
    android:background="@drawable/label_shape_drawable"/>

要解决您的第二个问题,您可以将此TextView用作ActionLayout的{​​{1}}:

MenuItem

然后,您可以在<item android:id="@+id/mex_box" android:orderInCategory="100" android:title="@string/mex_counter" android:visible="true" app:showAsAction="always" app:actionLayout="@layout/view_label"/> 中获取TextView

onCreateOptionsMenu

然后,随着您的private TextView mLabelTextView; @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_action_menu, menu); MenuItem menuItem = menu.findItem(R.id.mex_box); mLabelTextView = (TextView) menuItem.getActionView(); return super.onCreateOptionsMenu(menu); } ,您可以随时更改文字:

TextView