2012-05-18 8 views
5

私はICSAndroidのアクションバーsetActionViewレイアウト問題

にアクションバーからsetActionViewを使用しようとしてきた、それはまっすぐでなければなりませんが、どういうわけか、私は私が望んでいるだろうレイアウトアライメントが届かないように思えます。下の画像でわかるように、「ターゲット」アイコンはそのレイアウト内に正しく配置されています。しかし、setActionBar(進捗状況)を設定すると、進捗状況の表示は常に私が試したものと同じように調整されます。ここで

before clicking the menu item after clicking the menu item

2つの状態は前とメニュー項目をクリックした後、あります。あなたが見ることができるように、進行状況ビューは常に右に揃えられています。私は左から右に中央に私の進捗レイアウトのxmlの重力のオプションを変更しようとしたと私は何も変更するように見えない変更を行う。

私はこの問題に関する情報が見つかりませんでしたので、何か間違っていると思っています。

手掛かりがありますか? 助けてくれてありがとう!ここで

は私のアクションバーメニューレイアウト 'action_bar_menu.xmlは' ここに私のプログレスバーのレイアウトは '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

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

です

スタイルを明示的に定義し、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" /> 

これはアンドロイドスタイルシートで使われているようですhere

+0

はい、あなたは完全に正しいです:)。 Thxの助けを借りて、非常に感謝しています。 –

3

少し遅れたが、適切なソリューションなど4DPとして絶対値ではありません。正しいアプローチは、ABS値にのminWidthを設定することです:

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"/> 
関連する問題