2016-10-04 2 views
1

私はこのサンプルコードを使用して、自分のアプリケーション用のツールバーを作成しました。 アンドロイドツールバーのアイコンをプログラムで変更するにはどうすればよいですか?

私のアイテムの1つは、自分のアプリケーションのミュートボタンです。アイコンは標準のスピーカーアイコンです。ボタンをクリックすると、アプリをミュートまたはミュート解除します。これはちょうど同じように動作しますが、設定に合わせてアイコンを変更する必要があります。

私は、次のコードを試してみましたが、それは、アイコンを変更しません。

public override bool OnCreateOptionsMenu(IMenu menu) 
    { 
     MenuInflater.Inflate(Resource.Menu.home, menu); 
     _menu = menu; 

     return base.OnCreateOptionsMenu(menu); 
    } 

    private void setActionIcon_mute(bool setmuteicon) 
    { 
     IMenuItem item = _menu.FindItem(Resource.Id.mmute); 

     if (_menu != null) 
     { 
      if (setmuteicon) 
      { 
       //mute it 
       //this does nothing 
       item.SetIcon(Resource.Drawable.ic_volume_off_white_24dp); 
      } 
      else 
      { 
       //unmute it 
       //this does nothing 
       item.SetIcon(Resource.Drawable.ic_volume_mute_white_24dp); 
      } 
     } 
    } 

どのようにすればいいですか?

答えて

0

ツールバーオブジェクトを使用して、それぞれの子をビュー(ImageView) - View view = toolbar.getChildAt(index);にしてから、setImageResource()または他の任意の関数を使用してアイコンを変更することができます。

2

これを行うための正しい方法は、あなたの活動にonPrepareOptionsMenuメソッドをオーバーライドすることです。

は、ユーザーができる「お気に入り」または「未お気に入り」アイテムのアプリを持っていると言います。まず、2つのメニュー項目を持つmenu.xmlを作成し、visibleプロパティをtrueに設定します。

<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    tools:context="com.example.myapp.SoloActivity"> 

    <item android:id="@+id/add_favorite" 
     android:title="Favorite" 
     android:icon="@drawable/ic_favorite_border_black_24dp" 
     android:visible="true" 
     app:showAsAction="always" /> 

    <item android:id="@+id/remove_favorite" 
     android:title="Favorite" 
     android:icon="@drawable/ic_favorite_black_24dp" 
     android:visible="false" 
     app:showAsAction="always" /> 
</menu> 

次に、あなたの活動に、onPrepareOptionsMenuメソッドをオーバーライドして、表示するメニュー項目を決定します。あなたはこれらのそれぞれについて、「クリック」イベントを処理することができ、あなたの活動のonOptionsItemSelected方法で今

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    if (IsFavorite) { 
     menu.findItem(R.id.add_favorite).setVisible(false); 
     menu.findItem(R.id.remove_favorite).setVisible(true) 
    } else { 
     menu.findItem(R.id.add_favorite).setVisible(true); 
     menu.findItem(R.id.remove_favorite).setVisible(false) 
    } 
} 

、。次に、アイコンの可視性を切り替えるには、 invalidateOptionsMenu();に電話してください。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    switch (id) { 
     case R.id.add_favorite: 
      IsFavorite = !IsFavorite; 
      Toast.makeText(this, "Added to Favorites", Toast.LENGTH_SHORT).show(); 
      invalidateOptionsMenu(); 
      break; 

     case R.id.remove_favorite: 
      IsFavorite = !IsFavorite; 
      Toast.makeText(this, "Removed from Favorites", Toast.LENGTH_SHORT).show(); 
      invalidateOptionsMenu(); 
      break; 
    } 

    return super.onOptionsItemSelected(item); 
} 

invalidateOptionsMenu();を呼び出すと、onPrepareOptionsMenuが再び呼び出されることになりますどの、メニューが再描画されるようになります。

これは、実行時にメニュー項目に変更を加える場合に推奨される方法です。

マニュアルは、ここで見つけることができます:https://developer.android.com/guide/topics/ui/menus.html

私はこれが役に立てば幸い!

+0

@ user3302938あなたの質問に十分に答えたら、回答としてマークしてください(私は評判を使うことができます)。あなたの質問に答えることができないと感じる場合は、問題に深く掘り下げてコメントするようにしてください。ありがとう。 – dshrout

関連する問題