0

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

我有一个现有的自定义视图,它覆盖 Draw,并根据精度使用 GPS 状态进行自我更新。

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

我试图通过扩展 Drawable 而不是扩展 View(或 ImageView)将其实现为操作栏上的 MenuItem,我能够成功地做到这一点。

我的问题似乎是 w/ 扩展可绘制,当 GPS 精度发生变化时,我不能使我的视图无效以刷新。我可以调用 invalidateSelf,并且我启用了回调侦听器,其中传入了 invalidate(Drawable who),但是如果我尝试将 who 设置为更新的图像,则什么也不会发生。

如果我点击该图标,它会刷新和更新..

想知道是否有比扩展drawable更好的解决方案,或者如果我扩展drawable,我怎样才能让它在没有用户输入的情况下动态更新。

4

1 回答 1

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();
}
于 2013-02-11T17:06:17.523 回答