2012-05-18 102 views
5

我一直試圖在ICSAndroid的動作條setActionView佈局問題

使用setActionView從動作條似乎應該是簡單的,但不知何故我沒有變,我會希望佈局對齊。正如您在下面的圖片中看到的,「目標」圖標在其佈局中正確居中。但是當我設置ActionBar(進度)時,無論我嘗試什麼,進度視圖總是與右邊對齊。

before clicking the menu item after clicking the menu item

這裏有2個狀態,之前並單擊該菜單項後。正如你所看到的,進度視圖總是與右側對齊。我試着改變我的進度佈局xml中的重力選項從左到右到中心,無論我做什麼改變它似乎都沒有改變任何東西。

我還沒有找到任何關於這個問題的信息,所以我想我一定在做錯事。

有沒有人有線索? 感謝您的幫助!

這裏是我的操作欄菜單佈局 '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> 

這裏是我的進度佈局 '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> 

最後,這裏是我testx活動

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

回答

9

似乎明確定義了樣式並在其中添加了4dip填充佈局的根膨脹,如下圖所示解決了這個問題

<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" /> 

這似乎在Android樣式here

+0

是你是完全正確的:)。 Thx的幫助非常感謝。 –

3

使用有點晚了,但正確的解決方案是不是一個絕對的數值,如4DP。正確的做法是將minWidth設置爲ABS值:

android:minWidth="@dimen/abs__action_button_min_width" 

例進度條:

<?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"/>