android menu改icon,以编程方式更改Android Overflow菜单图标

实际上,您可以使用一些技巧以编程方式更改溢出图标。这是一个例子:

为溢出菜单创建样式并传递内容描述

@string/accessibility_overflow

@style/Widget.ActionButton.Overflow

现在调用ViewGroup.findViewsWithText并传递您的内容描述。因此,类似:

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

// The content description used to locate the overflow button

final String overflowDesc = getString(R.string.accessibility_overflow);

// The top-level window

final ViewGroup decor = (ViewGroup) getWindow().getDecorView();

// Wait a moment to ensure the overflow button can be located

decor.postDelayed(new Runnable() {

@Override

public void run() {

// The List that contains the matching views

final ArrayList outViews = new ArrayList<>();

// Traverse the view-hierarchy and locate the overflow button

decor.findViewsWithText(outViews, overflowDesc,

View.FIND_VIEWS_WITH_CONTENT_DESCRIPTION);

// Guard against any errors

if (outViews.isEmpty()) {

return;

}

// Do something with the view

final ImageButton overflow = (ImageButton) outViews.get(0);

overflow.setImageResource(R.drawable.ic_action_overflow_round_red);

}

}, 1000);

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Add a dummy item to the overflow menu

menu.add("Overflow");

return super.onCreateOptionsMenu(menu);

}

View.findViewsWithText 是在API级别14中添加的,因此您必须使用自己的兼容性方法:

static void findViewsWithText(List outViews, ViewGroup parent, String targetDescription) {

if (parent == null || TextUtils.isEmpty(targetDescription)) {

return;

}

final int count = parent.getChildCount();

for (int i = 0; i < count; i++) {

final View child = parent.getChildAt(i);

final CharSequence desc = child.getContentDescription();

if (!TextUtils.isEmpty(desc) && targetDescription.equals(desc.toString())) {

outViews.add(child);

} else if (child instanceof ViewGroup && child.getVisibility() == View.VISIBLE) {

findViewsWithText(outViews, (ViewGroup) child, targetDescription);

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值