以编程方式访问MenuItem以更改Textcolor

时间:2015-05-13 04:56:04

标签: android android-actionbar android-menu

当用户点击菜单中的项目时,onOptionsItemSelected会将MenuItem作为参数触发。这个传递MenuItem扩展了TextView,与我们从menu.findItem()方法得到的不同。 要访问此用户需要单击该项目,我想访问此对象而无需用户单击菜单中的项目。

2 个答案:

答案 0 :(得分:2)

在On resume中只需调用findViewById并将其强制转换为TextView。 您需要在Timer中进行此操作以后延迟代码,直到视图被撤消,因为它是由菜单呈现的。 对我来说,它就像这样

  if (!created) { // for first resume only
        created = true;
        Timer t = new Timer();
           t.schedule(new TimerTask() { // Might be done in better way, dont  know yet
            @Override
            public void run() {
                try {
                    while true {
                        final Object o = findViewById(R.id.mServerTime);
                        if (o == null) {
                            try {
                                Thread.sleep(1000);
                            } catch (Exception exp) {
                            }
                        } else {
                            if (o != null && o instanceof TextView) {
                                runOnUiThread(new Runnable() {
                                    @Override
                                    public void run() {
                                        ((TextView) o).setTextColor(Color.WHITE);
                                    }
                                });
                            }
                            break;
                        }
                    }
                }catch (Exception exp) {}
            }
        },1000);

答案 1 :(得分:0)

我无法在上面的答案中发表评论,所以我写了另一个答案。了解视图实际放置在屏幕上的更可靠方法是观察它的ViewTreeObserver,例如:

public class ActivityMain extends Activity {
    // Instance variables
    OnLayoutReadyListener onLayoutReadyListener = new OnLayoutReadyListener();
    View v;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        v = findViewById(R.id.mServerTime);
        v.getViewTreeObserver().addOnGlobalLayoutListener(onLayoutReadyListener);
    }

    class OnLayoutReadyListener implements ViewTreeObserver.OnGlobalLayoutListener {
        @Override
        public void onGlobalLayout() {
            // this will be called once view V is placed and measured on the screen
            v.setTextColor(Color.WHITE);
            // remove this listener to prevent any additional callbacks
            v.getViewTreeObserver().removeOnGlobalLayoutListener(onLayoutReadyListener);
        }
    }
}