2012-05-18 12 views
5

Ho cercato di utilizzare la setActionView dal ActionBar in ICSAndroid ActionBar setActionView problema di layout

sembra che dovrebbe essere dritto in avanti ma in qualche modo non sto ricevendo il layout tracciato che vorrei sperare. Come puoi vedere nell'immagine sottostante l'icona 'bersaglio' è centrata correttamente all'interno del suo layout. Ma quando impostoActionBar (progresso) la vista di avanzamento è sempre allineata a destra qualunque cosa provi.

before clicking the menu item after clicking the menu item

Qui ci sono i 2 stati, prima e dopo aver fatto clic sulla voce di menu. Come puoi vedere la vista del progresso è sempre allineata a destra. Ho provato a cambiare le opzioni di gravità nel mio layout di lavoro xml da sinistra a destra al centro e qualsiasi cosa io cambi, non sembra cambiare nulla.

Non ho trovato alcuna informazione su questo problema, quindi penso che devo fare qualcosa di sbagliato.

Qualcuno ne ha la minima idea? Grazie per l'aiuto!

Ecco la mia barra delle operazioni di menu Layout '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> 

Ecco la mia progressbar Layout '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> 

E infine ecco il mio testx Attività

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

risposta

9

Sembra che definisca esplicitamente lo stile e aggiunga un padding 4dip nel radice del layout per gonfiare come mostrato di seguito risolve questo problema

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

Questo sembra essere utilizzati nel foglio di stile android here

+0

Sì sei completamente ragione :). Grazie per l'aiuto è molto apprezzato. –

3

Un po 'tardi ma la soluzione non è un valore assoluto come 4DP. L'approccio giusto è quello di impostare il minWidth ai valori ABS:

android:minWidth="@dimen/abs__action_button_min_width" 

Esempio barra di avanzamento:

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