2012-05-18 9 views
5

que he estado tratando de utilizar el setActionView de la Barra de acciones en el ICSAndroid Barra de acciones setActionView cuestión de diseño

parece que debería ser simple pero de alguna manera no estoy recibiendo la composición de alineación que iba a esperar. Como puede ver en la imagen a continuación, el ícono de "objetivo" se centra correctamente dentro de su diseño. Pero cuando establezco ActionBar (progreso), la vista de progreso siempre se alinea a la derecha, sea lo que sea que intente.

before clicking the menu item after clicking the menu item

Éstos son los 2 estados, antes y después de hacer clic en el elemento de menú. Como puede ver, la vista de progreso siempre está alineada a la derecha. He intentado cambiar las opciones de gravedad en mi layout xml de izquierda a derecha en el centro y lo que sea que cambie no parece cambiar nada.

No he encontrado ninguna información sobre este problema, así que estoy pensando que debo estar haciendo algo mal.

¿Alguien tiene una pista? ¡Gracias por la ayuda!

Aquí está mi barra de acción de menú front end '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> 

Aquí está mi diseño progressbar '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> 

Y finalmente aquí está mi testx Actividad

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

Respuesta

9

Parece que definir explícitamente el estilo y agregar un relleno de 4 pb en el raíz de la disposición para inflar como se muestra a continuación resuelve este 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" /> 

Esto parece ser utilizado en la hoja de estilo androide here

+0

Si estás totalmente a la derecha :). Gracias por la ayuda es muy apreciada. –

3

Un poco tarde, pero la solución no es un valor absoluto, como 4DP. El enfoque correcto es establecer la minWidth a los valores ABS:

android:minWidth="@dimen/abs__action_button_min_width" 

Ejemplo barra de progreso:

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