java - android honeycomb caracteristicas
Reemplazo de un ícono de elemento del menú ActionBar con un ProgressBar indeterminado (6)
Estoy utilizando el código proporcionado en el número original aquí: https://github.com/JakeWharton/ActionBarSherlock/issues/425
Excepto para android:layout_width
y android:layout_height
(en el actionbar_indeterminate_progress.xml) uso 32dp
; ya que esta fue la forma en que se hizo en ActionBarCompat: http://developer.android.com/resources/samples/ActionBarCompat/res/layout-v11/actionbar_indeterminate_progress.html
Me gustaría agregar una barra de progreso indeterminada a la barra de acción de Honeycomb, para que cada vez que el usuario presione "Actualizar", el icono de actualización se convierta temporalmente en una barra de progreso indeterminada, hasta que la tarea finalice. La aplicación de correo electrónico ya hace esto, pero no puedo entender cómo.
¿Algún consejo?
Para aclarar la respuesta de Jon O, la clave es configurar y cancelar una vista de acción en la acción de actualización. Esto funciona tanto en ActionBarSherlock como en la barra de acción nativa 4.x. El siguiente fragmento de código colocará la vista indeterminada del progreso encima del icono de actualización, asumiendo que el elemento del menú de actualización tiene el ID ''refresh_option'' y el diseño de reemplazo (que tiene una Barra de progreso) está en el diseño ''progress_wheel'':
MenuItem item = abmenu.findItem(R.id.refresh_option);
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View abprogress = inflater.inflate(R.layout.progress_wheel, null);
item.setActionView(abprogress);
Desactive la vista de progreso y el icono de actualización volverá a ser visible:
item.setActionView(null);
Vea un ejemplo más detallado en github.
Para simplificar la respuesta de larham1 : ni siquiera es necesario inflar la nueva vista de acción porque MenuItem
tiene el método que acepta el diseño de id de acción, por lo que simplemente puede escribir:
item.setActionView(R.layout.progress_bar);
Puedes hacerlo fácilmente por:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.action_refresh:
item.setActionView(new ProgressBar(this));
break;
}
return super.onOptionsItemSelected(item);
Resulta que Google ha publicado un ejemplo de cómo hacer esto exactamente como parte de su proyecto de compatibilidad ActionBarCompat más amplio. Echar un vistazo
Es difícil decir exactamente cómo lo hace la aplicación de correo electrónico, pero es posible que desee mantenerse simple y simplemente llamar a setIcon con la identificación de un archivo XML StateDrawable
, y luego simplemente cambiar el estado usando un temporizador.