2016-03-08 49 views
1

我有一個ActionBar,我在該Activity的onCreateOptionsMenu(Menu)方法中添加了一對MenuItems對象。但我需要覆蓋其中一個項目的內容描述。如何覆蓋Action Bar MenuItem的內容描述?

我一直在想在XML中定義MenuItem並設置actionViewClass屬性。回到源代碼中,調用MenuItem.getActionView()作爲MenuItem,就像http://developer.android.com/training/appbar/action-views.html中所述。這樣我可以在它返回的View對象上調用setContentDescription()。但我寧願不使用XML文件。

除了使用XML選項之外,有沒有人有任何想法?

回答

1

好吧,我已經想通了。幸運的是,我不必轉向XML選擇。我所要做的就是創建一個新的View對象,並且apply it as the MenuItem's actionView。難的部分實際上是將視圖對象設置爲任何普通MenuItem對於當前主題的樣子(如果我在不使用actionView的情況下添加它)。按照片段(假設我的活動名稱爲MyActivity):

public boolean onCreateOptionsMenu(Menu menu) { 
     Button buttonView = new Button(this, null, android.R.attr.actionButtonStyle); 
     if (Build.VERSION.SDK_INT < 23) { 
      buttonView.setTextAppearance(this, android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu); 
     } else { 
      buttonView.setTextAppearance(android.R.style.TextAppearance_DeviceDefault_Widget_ActionBar_Menu); 
     } 
     buttonView.setText(R.string.option_title); // button label 
     buttonView.setContentDescription("Content description"); 
     buttonView.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View view) { 
       MyActivity.this.onOptionsItemSelected(item); 
      } 
     }); 

     MenuItem item = menu.add(R.string.option_title); 
     item.setActionView(buttonView); 
     ... 
     return super.onCreateOptionsMenu(menu); 
    }