2012-10-05 17 views

Odpowiedz

39

Jak zauważyłem w komentarzu, nie jestem do końca pewien, czy którykolwiek z tych zmian ulegnie zmianie z ABS (na pewno nie za wiele), ale ze standardowym paskiem akcji można załadować niestandardowy układ .xml dla twojego pasek akcji. Na przykład można mieć action_bar_title.xml:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/your_desired_background" > 

<TextView 
     android:id="@+id/title" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_centerInParent="true" 
      android:maxLines="1" 
      android:ellipsize="end" 
      android:text="@string/app_name" 
      android:textAppearance="?android:attr/textAppearanceMedium"/> 

</RelativeLayout> 

Następnie, w swojej działalności, co chcesz wywołać metodę takiego w onCreate():

private void setupActionBar() { 
     ActionBar ab = getActionBar(); 
     ab.setDisplayShowCustomEnabled(true); 
     ab.setDisplayShowTitleEnabled(false); 
     ab.setIcon(R.drawable.your_left_action_icon); 
     LayoutInflater inflator = (LayoutInflater) this 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View v = inflator.inflate(R.layout.action_bar_title, null); 

     TextView titleTV = (TextView) v.findViewById(R.id.title); 
     Typeface font = Typeface.createFromAsset(getAssets(), 
       "fonts/your_custom_font.ttf"); 
     titleTV.setTypeface(font); 

     ab.setCustomView(v); 

      ab.setHomeAsUpEnabled(true); 
    } 

Aby przejąć kontrolę nad lewym przedmiot działania, można to zrobić w swojej działalności:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
     case R.id.yourRightActionItem: 
         //do something 
         return true; 
     case android.R.id.home: //<-- this will be your left action item 
      // do something 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

oczywiście, upewnij się także wykonać inne niezbędne konfiguracje dla elementów działania w menu xml, jak również. Dotyczy to dowolnych elementów akcji po prawej stronie.

Edycja: Właśnie zobaczyłem w innym komentarzu, który powiedziałeś, że tytuł będzie obrazem. W takim przypadku wystarczy zastąpić TextView użyty w moim przykładzie obrazem ImageView i zignorować kod dostosowywania czcionki w metodzie setupActionBar().

Edycja2: Zaktualizowałem kod Java. Będziesz musiał zrobić ab.setHomeAsUpEnabled (true), a następnie mieć niestandardowy motyw do wprowadzenia niewidocznego (lub być może @ null, chociaż nie wiem, czy Android to zaakceptuje) do rysowania dla domu jako wskaźnika up. Zobacz tutaj (zaczerpnięte z odpowiedzią here :)

<style name="Theme.MyFancyTheme" parent="android:Theme.Holo"> 
    <item name="android:homeAsUpIndicator">@drawable/my_fancy_up_indicator</item> 
    <!-- or you could try @null --> 
</style> 
+0

więc rozwiązanie do pozycji działania po lewej stronie będzie udawać używając przycisku UP jak napisałem w pierwszym komentarzu, prawda? – urSus

+0

Tak, a chcesz dodać niestandardowy styl dla Androida: homeAsUpIndicator, aby nie uzyskać tego wskaźnika z lewej strony. Zaktualizuję więcej kodu. – dennisdrew

+0

Jak ukryć strzałkę bez androida: homeAsUpIndicator? Wymaga poziomu interfejsu API 11, a moje minimum to 8 –