2012-10-05 28 views

Trả lời

39

Như tôi đã lưu ý trong một nhận xét, tôi không chắc chắn nếu bất kỳ điều này sẽ thay đổi với ABS (Tôi chắc chắn sẽ không nhiều), nhưng với Action Bar chuẩn, bạn có thể tải bố cục tùy chỉnh .xml cho tiêu đề thanh tác vụ. Ví dụ, bạn có thể có 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> 

Sau đó, trong hoạt động của bạn, bạn sẽ muốn gọi một phương thức như thế này trong 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); 
    } 

Để kiểm soát bên trái mục hành động, bạn có thể thực hiện việc này trong Hoạt động của mình:

@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); 
     } 
    } 

Tất nhiên, hãy đảm bảo bạn cũng thực hiện các thiết lập cần thiết khác cho mục Hành động trong trình đơn xml của mình. Điều này sẽ dành cho mọi mục tác vụ bên phải.

Chỉnh sửa: Chỉ nhìn thấy trong một nhận xét khác mà bạn đã nói tiêu đề đó sẽ là hình ảnh. Nếu đúng như vậy, chỉ cần thay thế TextView tôi đã sử dụng trong ví dụ của tôi bằng ImageView của bạn và bỏ qua mã tùy chỉnh phông chữ trong phương thức setupActionBar().

Chỉnh sửa2: Tôi đã cập nhật mã Java của mình. Bạn sẽ cần phải làm ab.setHomeAsUpEnabled (true), và sau đó có một chủ đề tùy chỉnh để thực hiện một ẩn (hoặc có lẽ @null mặc dù tôi không biết nếu Android sẽ chấp nhận điều đó) drawable cho nhà như chỉ báo lên. Xem ở đây (lấy từ câu trả lời 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

để giải pháp cho mục tác vụ ở bên trái sẽ giả mạo bằng nút LÊN như tôi đã viết trong nhận xét đầu tiên, phải không? – urSus

+0

Có, và bạn muốn thêm kiểu tùy chỉnh cho android: homeAsUpIndicator để bạn không nhận được chỉ báo chevron bên trái đó. Tôi sẽ cập nhật với nhiều mã hơn. – dennisdrew

+0

Làm cách nào để ẩn mũi tên mà không có android: homeAsUpIndicator? Nó yêu cầu cấp API 11 và tối thiểu của tôi là 8 –

Các vấn đề liên quan