自定义视图代替MenuItem.Icon()ActionBarSherlock

时间:2013-02-10 20:22:22

标签: android view actionbarsherlock drawable menuitem

尝试使用Actionbar Sherlock对我的Actionbar进行一些自定义..

我有一个现有的自定义视图,它覆盖了Draw,并根据Accuracy以GPS状态更新自身。

我希望它是用户可以使用的最正确的菜单选项。 (所以我相信customView已经出局了。)

我试图通过扩展Drawable而不是扩展View(或ImageView),在Action栏上实现这个功能,这是我能够成功完成的。

我的问题似乎是延伸可绘制,当GPS精度发生变化时,我无法使我的视图无效。我可以调用invalidateSelf,并且我启用了一个Callback侦听器,其中传入了invalidate(Drawable who),但是如果我尝试将who设置为更新的图像,则没有任何反应..

如果我点按图标,它会刷新&更新..

想知道是否有比扩展drawable更好的解决方案,或者如果我扩展drawable,我怎么能让它动态更新w / out用户输入。

1 个答案:

答案 0 :(得分:1)

如果只显示几个不同的状态(可能有4或5个图标可以与您的应用捆绑在一起),我建议您在onPrepareOptionsMenu()期间动态更新菜单选项。

public boolean onPrepareOptionsMenu(Menu menu) {
    MenuItem gpsStatus = menu.findItem(R.id.menu_gps);

    // figure out which icon to show here
    // int drawableId = R.drawable.ic_gps_accurate

    gpsStatus.setIcon(drawableId);
}

要触发此代码,只需调用invalidateOptionsMenu();您可能希望保存状态,以便更快和更快你的onPrepareOptionsMenu()更容易找到正确的图标。

private void onGPSStatusUpdated(int newStatus) {
    mGPSStatus = newStatus;
    invalidateOptionsMenu();
}