2013-08-01 13 views
5

Próbuję użyć nowego kompasu ActionBar dostarczonego w ostatniej bibliotece wsparcia -7. Korzystanie z próbek w SuppportV7Demos, kiedy dotknę "DISPLAY_USE_LOGO", ikona nie zmienia się.ActionBar Compat nie wyświetla logo w systemie Android 2.3.3

Ponieważ nie mogę sprawić, by działał on również we własnej aplikacji, czy ktoś to osiągnął?

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) { 
} 
} 

oraz: 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> 

Odpowiedz

20

W wersji ActionBarSherlock mojego app zachodziło ikony i logo w manifeście. Po zmianie na ActionBarCompat logo nie pojawiło się na pasku akcji w systemie Android 2.2, 2.3.x.

Aby logo pokaz ustawić go w kodzie

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

i usunięte 'android: logo = "@ odkształcalne/logo_icon"' z manifestu.

Testowany na systemach Android 2.2, 2.3.3 i 4.1.2.

+2

działa nawet bez zdejmowania „android: logo =«@ rozciągliwej/logo_icon»z manifestu . – JulienC

+0

to działa dla mnie! – ingyesid

7

Ustawienie logo w AndroidManifest.xml nie aktualizuje paska akcji w starszych wersjach systemu Android (przed API 9), ponieważ nie ma sposobu na odzyskanie tej wartości w środowisku wykonawczym w tych wersjach systemu Android.

Aby zmienić ikonę, aby logo we wszystkich wersjach Androida można projektować pasek działań w /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> 
Powiązane problemy