2012-05-18 13 views
5

Tôi đã cố gắng sử dụng setActionView từ ActionBar trong ICSAndroid ActionBar setActionXem vấn đề bố cục

Dường như nó phải thẳng về phía trước nhưng bằng cách nào đó tôi không nhận được sự sắp xếp bố cục mà tôi hy vọng. Như bạn có thể thấy trong hình bên dưới biểu tượng 'target' được căn giữa trong layout của nó. Nhưng khi tôi setActionBar (tiến trình), chế độ xem tiến trình luôn được căn chỉnh ở bên phải bất kỳ điều gì tôi thử.

before clicking the menu item after clicking the menu item

Sau đây là 2 quốc gia, trước và sau khi nhấp vào mục menu. Như bạn có thể thấy chế độ xem tiến trình luôn được căn chỉnh ở bên phải. Tôi đã thử thay đổi các tùy chọn trọng lực trong bố cục tiến trình xml của tôi từ trái sang phải đến trung tâm và bất cứ điều gì tôi thay đổi nó dường như không thay đổi bất cứ điều gì.

Tôi chưa tìm thấy bất kỳ thông tin nào liên quan đến vấn đề này nên tôi nghĩ tôi phải làm điều gì đó sai.

Có ai có đầu mối không? Cảm ơn sự giúp đỡ!

Dưới đây là thanh hành động của tôi đơn bố trí 'action_bar_menu.xml'

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/locate" 
      android:title="locate" 
      android:icon="@drawable/locate" 
      android:showAsAction="ifRoom|withText" /> 
</menu> 

Dưới đây là progressbar tôi bố trí 'inderterminate_progress.xml'

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:gravity="center"> 

    <ProgressBar android:layout_width="25dp" 
       android:layout_height="25dp" 
       android:layout_gravity="center" 
       android:indeterminate="true" 
       style="?android:attr/progressBarStyleInverse"/> 
</FrameLayout> 

Và cuối cùng đây của Hoạt động testx tôi

public class HelloAndroidActivity extends Activity { 

    /** 
    * Called when the activity is first created. 
    * @param savedInstanceState If the activity is being re-initialized after 
    * previously being shut down then this Bundle contains the data it most 
    * recently supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it is null.</b> 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     getActionBar().setTitle("Test"); 
    } 

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

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     super.onOptionsItemSelected(item); 


     if (R.id.locate == item.getItemId()) { 

      final MenuItem menuItem = item.setActionView(R.layout.inderterminate_progress); 

      new Thread(new Runnable() { 
       @Override 
       public void run() { 
        SystemClock.sleep(3000); 
        runOnUiThread(new Runnable() { 
         @Override 
         public void run() { 
          menuItem.setActionView(null); 
         } 
        }); 
       } 
      }).start(); 
     } 

     return true; 
    } 
} 

Trả lời

9

Dường như định nghĩa rõ ràng kiểu dáng và thêm phần đệm 4dip vào gốc của cách bố trí để thổi phồng như hình dưới đây giải quyết vấn đề này

<ImageView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center" 
    android:paddingLeft="4dip" 
    android:paddingRight="4dip" 
    style="?android:attr/actionButtonStyle" /> 

Điều này dường như được sử dụng trong stylesheet android here

+0

Có bạn đang hoàn toàn đúng :). Thx cho sự giúp đỡ nó rất đánh giá cao. –

3

Một chút muộn nhưng các giải pháp phù hợp không phải là một giá trị tuyệt đối như 4dp. Cách tiếp cận đúng là để thiết lập MinWidth đến giá trị ABS:

android:minWidth="@dimen/abs__action_button_min_width" 

Ví dụ thanh tiến trình:

<?xml version="1.0" encoding="utf-8"?> 

<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android" 
      android:minWidth="@dimen/abs__action_button_min_width" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:focusable="true" 
      android:layout_gravity="center" 
      style="@android:style/Widget.ProgressBar.Small"/>