web-dev-qa-db-ja.com

ActionBarの動的TextView

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 [〜#〜]がスローされます。

13
masmic

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をクラス変数として作成します。

20
Yashdeep Patel

誰かがまだこれを必要とする場合に備えて:

メニュー項目の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);
}
1
Pens Naku