我需要在ActionBar中实现TextView。此TextView显示蓝牙连接的状态,因此它将根据此状态进行更新。
我不是在谈论改变ActionBar的标题,而是添加一个textview f.e.在标题下或在右侧。
目前,我所做的是在menu.xml中创建一个项目:
<item
android:id="@+id/statusTextview"
android:actionViewClass="android.widget.TextView"
android:showAsAction="ifRoom"
android:title="Disconected" />
然后在mainActivity上添加它:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.bluetooth, menu);
return true;
}
@Override
public boolean onPrepareOptionsMenu(final Menu menu) {
final MenuItem menuItem = menu.findItem(R.id.statusTextview);
tvStatus = (TextView) menuItem.getActionView();
return super.onPrepareOptionsMenu(menu);
}
但它没有正常工作。第一次应显示Disconnected
状态,并且不显示任何内容。然后,当状态发生变化且textview必须更新时,它会抛出 NPE 。
答案 0 :(得分:20)
您可以在
中手动添加TextView@Override
public boolean onCreateOptionsMenu(Menu menu) {
通过以下代码。
TextView tv = new TextView(this);
tv.setText(getString(R.string.matchmacking)+" ");
tv.setTextColor(getResources().getColor(R.color.WHITE));
tv.setOnClickListener(this);
tv.setPadding(5, 0, 5, 0);
tv.setTypeface(null, Typeface.BOLD);
tv.setTextSize(14);
menu.add(0, FILTER_ID, 1, R.string.matchmacking).setActionView(tv).setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
如果你想访问文本视图,那么将tv作为类变量。
答案 1 :(得分:1)
万一有人仍然需要这个:
您可以通过调用菜单项上的setTitle("Your new string or String resource id")
方法动态设置菜单项的text属性。这样,您就不必将ActionView强制转换为TextView。例如:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
String bluetoothStatus = "Connected"; //get from source
menu.findItem(R.id.the_id_of_the_menu_item).setTitle(bluetoothStatus);
return super.onPrepareOptionsMenu(menu);
}