public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
return true;
case R.id.searchIcon:
return true;
case R.id.startRefresh:
refreshItem = item;
refresh();
return true;
case R.id.stopRefresh:
if (refreshItem != null && refreshItem.getActionView() != null) {
refreshItem.getActionView().clearAnimation();
refreshItem.setActionView(null);
}
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void refresh() {
if (FeedActivity.this != null) {
/*
* Attach a rotating ImageView to the refresh item as an ActionView
*/
LayoutInflater inflater = (LayoutInflater) FeedActivity.this
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
ImageView iv = (ImageView) inflater.inflate(
R.layout.refresh_action_view, null);
Animation rotation = AnimationUtils.loadAnimation(
FeedActivity.this, R.anim.clockwise_refresh);
rotation.setRepeatCount(Animation.INFINITE);
iv.startAnimation(rotation);
refreshItem.setActionView(iv);
}
}
prima di fare clic:Aggiorna voce di menu di animazione in ActionBarSherlock
Dopo Cliccando:
Qui l'icona è in corso di animazione (a rotazione).
Problema:
perché è spostando a sinistra?
una volta che si sposta a sinistra, l'icona diventa non cliccabile e stranamente il dispositivo pulsante Indietro anche non funziona
EDIT:
In commenti qui sotto questa risposta:
Jake Warton dice che se si utilizza un'icona di dimensioni quadrate e corrette per la voce di menu, non si otterrà questo comportamento strano, a qualcuno che ha lo stesso pr oblema.
Ma sto usando un'immagine 32x32 su un dispositivo che utilizza i drawable mdpi. Il che come detto ci deve lavorare :(
Thank You
EDIT:
refresh_action_view.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
style="@style/Widget.Sherlock.ActionButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_refresh" />
stile personalizzato che uso nel mio app
<style name="My_solid_ActionBar" parent="@style/Widget.Sherlock.Light.ActionBar.Solid.Inverse">
<item name="background">@drawable/ab_solid_My</item>
<item name="backgroundStacked">@drawable/ab_stacked_solid_My</item>
<item name="backgroundSplit">@drawable/ab_bottom_solid_My</item>
<item name="progressBarStyle">@style/My_ProgressBar</item>
<item name="android:background">@drawable/ab_solid_My</item>
<item name="android:backgroundStacked">@drawable/ab_stacked_solid_My</item>
<item name="android:backgroundSplit">@drawable/ab_bottom_solid_My</item>
<item name="android:progressBarStyle">@style/My_ProgressBar</item>
</style>
FWIW, ecco un progetto che dimostra l'effetto desiderato, nel caso in cui fornisca qualche idea: https://github.com/commonsguy/cw-omnibus/tree/master/Progress/ActionBar – CommonsWare
Sì, ho usato il tuo codice e anche ora la barra di avanzamento (impostata come ActionView) si sposta a sinistra. E nessuna delle altre voci di menu funziona. –
Dovresti pubblicare un progetto di esempio completo che mostri il tuo problema. Se nel mio esempio collegato sopra, faccio 'about' be' always' e il primo elemento della barra delle azioni, il mio 'refresh' funziona ancora, senza mostrare il comportamento che descrivi. – CommonsWare