ActionBarにTextViewを実装する必要があります。このTextViewは、Bluetooth接続のステータスを表示するため、このステータスに応じて更新されます。
ActionBarのタイトルを変更するのではなく、テキストビューを追加することについて話します。タイトルの下または右側。
現時点では、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
ステータスを表示する必要があり、何も表示されません。次に、ステータスが変更され、テキストビューを更新する必要がある場合、[〜#〜] npe [〜#〜]がスローされます。
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をクラス変数として作成します。
誰かがまだこれを必要とする場合に備えて:
メニュー項目の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);
}