2013-08-01 16 views
5

Sto provando a utilizzare la nuova ActionBar Compat fornita nell'ultima libreria di supporto-v7. Utilizzando gli esempi in SuppportV7Demos, quando tocco "DISPLAY_USE_LOGO", l'icona non cambia.Compatibile con ActionBar non mostrando logo su Android 2.3.3

Dal momento che non riesco a farlo funzionare anche nella mia app, qualcuno l'ha raggiunto?

ActionBarDisplayOptions.java 

package com.example.android.supportv7.app; 

public class ActionBarDisplayOptions extends ActionBarActivity 
    implements View.OnClickListener, ActionBar.TabListener { 
private View mCustomView; 
private ActionBar.LayoutParams mCustomViewLayoutParams; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.action_bar_display_options); 

    findViewById(R.id.toggle_home_as_up).setOnClickListener(this); 
    findViewById(R.id.toggle_show_home).setOnClickListener(this); 
    findViewById(R.id.toggle_use_logo).setOnClickListener(this); 
    findViewById(R.id.toggle_show_title).setOnClickListener(this); 
    findViewById(R.id.toggle_show_custom).setOnClickListener(this); 
    findViewById(R.id.toggle_navigation).setOnClickListener(this); 
    findViewById(R.id.cycle_custom_gravity).setOnClickListener(this); 
    findViewById(R.id.toggle_visibility).setOnClickListener(this); 

    // Configure several action bar elements that will be toggled by display options. 
    mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null); 
    mCustomViewLayoutParams = new ActionBar.LayoutParams(
      LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 

    final ActionBar bar = getSupportActionBar(); 
    bar.setCustomView(mCustomView, mCustomViewLayoutParams); 
    bar.addTab(bar.newTab().setText("Tab 1").setTabListener(this)); 
    bar.addTab(bar.newTab().setText("Tab 2").setTabListener(this)); 
    bar.addTab(bar.newTab().setText("Tab 3").setTabListener(this)); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.display_options_actions, menu); 
    return true; 
} 

@Override 
public boolean onSupportNavigateUp() { 
    finish(); 
    return true; 
} 

@Override 
public void onClick(View v) { 
    final ActionBar bar = getSupportActionBar(); 
    int flags = 0; 
    switch (v.getId()) { 
     case R.id.toggle_home_as_up: 
      flags = ActionBar.DISPLAY_HOME_AS_UP; 
      break; 
     case R.id.toggle_show_home: 
      flags = ActionBar.DISPLAY_SHOW_HOME; 
      break; 
     case R.id.toggle_use_logo: 
      flags = ActionBar.DISPLAY_USE_LOGO; 
      break; 
     case R.id.toggle_show_title: 
      flags = ActionBar.DISPLAY_SHOW_TITLE; 
      break; 
     case R.id.toggle_show_custom: 
      flags = ActionBar.DISPLAY_SHOW_CUSTOM; 
      break; 
     case R.id.toggle_navigation: 
      bar.setNavigationMode(
        bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_STANDARD 
          ? ActionBar.NAVIGATION_MODE_TABS 
          : ActionBar.NAVIGATION_MODE_STANDARD); 
      return; 
     case R.id.cycle_custom_gravity: { 
      ActionBar.LayoutParams lp = mCustomViewLayoutParams; 
      int newGravity = 0; 
      switch (lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { 
       case Gravity.LEFT: 
        newGravity = Gravity.CENTER_HORIZONTAL; 
        break; 
       case Gravity.CENTER_HORIZONTAL: 
        newGravity = Gravity.RIGHT; 
        break; 
       case Gravity.RIGHT: 
        newGravity = Gravity.LEFT; 
        break; 
      } 
      lp.gravity = lp.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK | newGravity; 
      bar.setCustomView(mCustomView, lp); 
      return; 
     } 
     case R.id.toggle_visibility: 
      if (bar.isShowing()) { 
       bar.hide(); 
      } else { 
       bar.show(); 
      } 
      return; 
    } 

    int change = bar.getDisplayOptions()^flags; 
    bar.setDisplayOptions(change, flags); 
} 

@Override 
public void onTabSelected(Tab tab, FragmentTransaction ft) { 
} 

@Override 
public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
} 

@Override 
public void onTabReselected(Tab tab, FragmentTransaction ft) { 
} 
} 

e: action_bar_display_options.xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
<LinearLayout android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:orientation="vertical"> 
    <Button android:id="@+id/toggle_home_as_up" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_home_as_up" /> 
    <Button android:id="@+id/toggle_show_home" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_show_home" /> 
    <Button android:id="@+id/toggle_use_logo" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_use_logo" /> 
    <Button android:id="@+id/toggle_show_title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_show_title" /> 
    <Button android:id="@+id/toggle_show_custom" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_show_custom" /> 
    <Button android:id="@+id/toggle_navigation" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_navigation" /> 
    <Button android:id="@+id/cycle_custom_gravity" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/cycle_custom_gravity" /> 
    <Button android:id="@+id/toggle_visibility" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="@string/toggle_visibility" /> 
</LinearLayout> 
</ScrollView> 

risposta

20

Nella versione ActionBarSherlock della mia app stavo installando l'icona e il logo nel manifesto. Dopo il passaggio ad ActionBarCompat, il logo non viene mostrato nella barra di azione su Android 2.2, 2.3.x.

per rendere lo spettacolo logo ho impostato nel codice

ActionBar ab = getSupportActionBar(); 
ab.setLogo(R.drawable.logo); 

e rimosso 'Android: logo = "@ drawable/logo_icon"' dal manifesto.

Testato su Android 2.2, 2.3.3 e 4.1.2.

+2

funziona anche senza rimuovere la 'Android: logo = "@ drawable/logo_icon" dal manifesto . – JulienC

+0

funziona per me! – ingyesid

7

L'impostazione del logo in AndroidManifest.xml non aggiorna la barra delle azioni nelle versioni precedenti di Android (prima dell'API 9), perché non c'è modo di recuperare quel valore in fase di esecuzione in quelle versioni di Android.

Per cambiare l'icona di un logo in tutte le versioni di Android è possibile lo stile della barra delle operazioni in /res/values.xml:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> 
    <item name="actionBarStyle">@style/Widget.AppActionBar</item> 
</style> 
<style name="Widget.AppActionBar" parent="@style/Widget.AppCompat.ActionBar"> 
    <item name="logo">@drawable/ic_logo</item> 
</style> 
Problemi correlati