2012-10-19 13 views
20

Próbuję utworzyć pasek akcji bez logo/tekstu aplikacji i ze scentralizowanym obrazkiem, i wiem, że jest to możliwe z niestandardowym widokiem, tutaj jest mój kod:ActionBarSherlock - Zakładki wyświetlane poniżej paska akcji z niestandardowym widokiem

protected void initActionBar() 
{ 
    RelativeLayout custom = new RelativeLayout(getApplicationContext()); 
    ActionBar.LayoutParams params = new ActionBar.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
    custom.setLayoutParams(params); 

    custom.setGravity(Gravity.CENTER); 
    custom.setBackgroundDrawable(getResources().getDrawable(R.drawable.background_grad_grey_rounded)); 

    ImageView image =new ImageView(getApplicationContext()); 
    image.setBackgroundResource(R.drawable.ic_launcher); 
    custom.addView(image); 

    ab = getSupportActionBar(); 


    ab.setDisplayShowCustomEnabled(true); 
    ab.setCustomView(custom); 
    ab.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 
    tab_connect = ab.newTab(); 
    tab_connect.setText("CONNECT"); 
    tab_connect.setTabListener(this); 

    tab_discover = ab.newTab(); 
    tab_discover.setText("DISCOVER"); 
    tab_discover.setTabListener(this); 

    tab_simplify= ab.newTab(); 
    tab_simplify.setText("SIMPLIFY"); 
    tab_simplify.setTabListener(this); 

    ab.addTab(tab_simplify); 
    ab.addTab(tab_discover); 
    ab.addTab(tab_connect); 

    ab.setDisplayShowTitleEnabled(false); 
    ab.setDisplayShowHomeEnabled(false); 

} 

jednak kiedy ukryć logo, przesunięcia actionbar poniżej moich zakładkach tak:

screen shot

ale jeśli ustawić ab.setDisplayShowHomeEnabled (true) actionbar pojawia się to właściwe miejsce (ale z logo, którego nie chcę):

enter image description here

Co robię źle?

+1

Wydaje się błędem: https://github.com/JakeWharton/ActionBarSherlock/issues/327 – input

+0

prostu próbowałem go z normalnym android actionbar i miał ten sam problem ... – AndroidNoob

Odpowiedz

32

Oto proste obejście:

zastosowanie następujące metody w onCreate:

View homeIcon = findViewById(android.R.id.home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 

to wali przycisk home całkowicie.

PS: używam standardowego ActionBar ale to powinno działać tak samo

Albo

jeśli chcesz wesprzeć w Sherlocka Actionbar celu niż trzeba użyć tej

actionBar.setLogo(null); // forgot why this one but it helped 

View homeIcon = findViewById(
     Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
     android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
((View) homeIcon).setVisibility(View.GONE); 

actionBar.setDisplayShowTitleEnabled(false); 
12

It Warto zauważyć, że wybrana odpowiedź będzie działać tylko z natywnym ActionBarem, ponieważ element android.R.id.home nie istnieje na pre-hc. Oznacza to, że na urządzeniach pre-hc otrzymasz NPE.

Ponieważ używasz ActionBarSherlock, zakładam, że chcesz obsługiwać urządzenia pre-hc, więc powinieneś użyć poprawnego ID w oparciu o wersję platformy. ABS wystawi odpowiednik android.R.id.home poprzez R.id.abs__home za jego implementację ActionBar.

Więc możemy dostosować sugerowane obejście jak:

View homeIcon = findViewById(
        Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
        android.R.id.home : R.id.abs__home); 
((View) homeIcon.getParent()).setVisibility(View.GONE); 
+0

wciąż to robi” t pozwól mi użyć tytułu jako przycisku "up", tak jak chciałbym. – Czechnology

+0

to działa dobrze, ale czarna przestrzeń nie pozostaje tam, gdzie logo było raz. Jak pozbyć się czarnej przestrzeni? – BurninatorDor

6

to działa super! (Czytaj bugreport komentarze;))

actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 
1

użyłem tego

ActionBar ab = getSupportActionBar(); 
ab.setDisplayShowHomeEnabled(true); 
    ab.setDisplayHomeAsUpEnabled(false); 
    ab.setHomeButtonEnabled(false); 
    ab.setLogo(null); 

    View homeIcon = findViewById(
      Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : R.id.abs__home); 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
    ((View) homeIcon).setVisibility(View.GONE); 

    ab.setDisplayShowTitleEnabled(false); 
0

prostu usunąć flagę DISPLAY_SHOW_HOME ze swoimi actionBar.setDisplayOptions() metoda.

3

następującą odpowiedź @furyfred, kod ten może być używany podczas korzystania z ActionBar z AppCompat Biblioteka:

View homeIcon = findViewById(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
      android.R.id.home : android.support.v7.appcompat.R.id.home); 

if (null != homeIcon && null != homeIcon.getParent()) 
{ 
    ((View) homeIcon.getParent()).setVisibility(View.GONE); 
} 
2

Wszystko po wyżej zawaleniem ikonę domu, ale pozostawiając pustą przestrzeń. Aby uniknąć, musisz ustawić rozmiar logo na zero. Poniżej dodałem mój fragment kodu.it może pomóc innym, którzy zmagają się z tym samym problemem.Dzięki

 actionBar.setLogo(new ColorDrawable(Color.TRANSPARENT)); 

     View homeIcon = findViewById(
       Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ? 
       android.R.id.home : R.id.abs__home); 
     ((View) homeIcon.getParent()).setLayoutParams(new LinearLayout.LayoutParams(0, 0)); 
     ((View) homeIcon).setVisibility(View.GONE); 
+0

to najlepsza odpowiedź, inne rozwiązania zmieniają stylizację akcji – marmor

Powiązane problemy