2012-02-01 11 views
25

私はActionBarの "home"アイコンを動的に変更したいと思います。これはActionBar.setIcon(...)でv14で簡単に行えますが、これまでのバージョンではこれを実現するための方法が見つかりません。Android:動的にActionBarアイコンを変更しますか?

+0

を参照してください何が起こるのか?そして、あなたがハニーコム前のもので何かを達成しようとしているなら、[ActionBarSherlock](http://actionbarsherlock.com/)を見てください。 – adneal

+0

私はカスタマイズされたActionBar-esqueコンポーネントをpre-v11 ActionBarSherlockに似ています)。これはv11-v13(ハニカム)用です。私がhoneycombでsetIconを呼び出すと、methodNotfound例外が発生します。 – ab11

+0

setIconは、APIレベル> = 14でのみ利用可能です。 – Sandra

答えて

17

は、Googleが提供するActionbarCompatコードを使用している場合、あなたはActionBarHelperBase経由でホームアイコンにアクセスすることができます。 API v4以降のJavaクラス。

//code snippet from ActionBarHelperBase.java 
    ... 
    private void setupActionBar() { 
    final ViewGroup actionBarCompat = getActionBarCompat(); 
    if (actionBarCompat == null) { 
     return; 
    } 

    LinearLayout.LayoutParams springLayoutParams = new LinearLayout.LayoutParams(
      0, ViewGroup.LayoutParams.MATCH_PARENT); 
    springLayoutParams.weight = 1; 

    // Add Home button 
    SimpleMenu tempMenu = new SimpleMenu(mActivity); 
    SimpleMenuItem homeItem = new SimpleMenuItem(tempMenu, 
      android.R.id.home, 0, mActivity.getString(R.string.app_name)); 
    homeItem.setIcon(R.drawable.ic_home_ftn); 
    addActionItemCompatFromMenuItem(homeItem); 

    // Add title text 
    TextView titleText = new TextView(mActivity, null, 
      R.attr.actionbarCompatTitleStyle); 
    titleText.setLayoutParams(springLayoutParams); 
    titleText.setText(mActivity.getTitle()); 
    actionBarCompat.addView(titleText); 
} 
... 

ActionBarActivityを拡張してそのように変更するアクティビティにアクセスできるホームボタンにコードを変更できる必要があります。

ハニカムはちょっと難しくて、そう簡単にアクセスできないようです。推測しても、そのidはandroid.R.id.homeである必要があります。そのため、ActionBarHelperHoneycomb.javaのビューから取得できます。

+5

はい!ありがとうございました。 'Activity.findViewById(android.R.id.home)'が動作します。 – ab11

22

あなたのアクションバーはシャーロックと同じように動作し、メニュー項目に基づいており、これは私の解決策である場合:

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    MenuItem switchButton = menu.findItem(R.id.SwitchSearchOption);  
    if(searchScriptDisplayed){ 
     switchButton.setIcon(R.drawable.menu_precedent); 
    }else{ 
     switchButton.setIcon(R.drawable.icon_search); 
    } 
    return super.onPrepareOptionsMenu(menu); 

} 
+0

ハニカムの場合は、sdkが提供するアクションバーを使用します。だから、v14で提供されているActionBar.setIcon()メソッドのハニカム相当物を見つけようとしています。 – ab11

+2

このすばらしいスニペットをありがとう - しばらくこれを探していた! – aaronsnoswell

+1

私のために働いた!ありがとう –

0

ActionBarは、マニフェストのandroid:logo属性を使用します供給される。これにより、アイコン(Launcher)とロゴ(ActionBarなど)に別々の描画可能なリソースを使用できます。

0

私はあなたがこのような何かを言う:あなたは `setIcon`呼び出すとき

getSupportActionBar().setHomeButtonEnabled(true); 
getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_drawer); 

がリンクHow to change the icon actionBarCompat

関連する問題