Actualiser l'animation de l'élément de menu dans ActionBarSherlock
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);
}
}
Avant De Cliquer Sur:
Après Avoir Cliqué Sur:
Ici, l'icône est animée(rotation).
Problème:
pourquoi est-il en se décalant sur la gauche?
une fois qu'il se décale vers la gauche, l'icône devient non cliquable et étrangement l'appareil touche retour ne fonctionnera pas non plus
EDIT:
Dans les commentaires ci-dessous cette réponse:
Jake Warton dit que si vous êtes en utilisant un carré et correcte de la taille de l'icône de l'élément de menu, vous ne obtenir ce comportement bizarre, pour quelqu'un qui a le même problème.
Mais je suis en utilisant un 32x32 image sur un périphérique qui utilise mdpi un drawable. Tel qu'il est indiqué, il doit travailler 🙁
Merci
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" />
De Style personnalisée-je utiliser dans mon application
<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>
source d'informationauteur Archie.bpgc
Vous devez vous connecter pour publier un commentaire.
Le problème est que vous n'êtes pas de la manipulation de tous les menus de l'inflation dans
onCreateOptionsMenu()
. La logique de base pour unActionBar
actualisation de l'animation que j'ai vu utilisé dans les applications de l'open-source , par exemple Andlytics (et aussi à moi-même utilisé dans les projets), est de mettre en œuvre unboolean
drapeau dansonCreateOptionsMenu()
de décider de montrer l'actualisation de l'animation.Vous pouvez la mettre en œuvre comme ceci: Lorsque votre
refresh()
méthode est appelée, elle définit laboolean
isRefreshing
drapeau de vrai et appelsinValidateOptionsMenu()
qui "derrière la scène" appelsonCreateOptionsMenu()
pour démarrer l'animation:Gonfler le menu en
onCreateOptionsMenu(...)
:Animation de démarrage comme suit:
Si vous voulez que l'utilisateur démarre l'animation quand il appuie sur l'icône d'actualisation, il faut faire ça dans
onOptionsItemSelected()
:Pour arrêter l'animation d'appel:
Ce code est issu d'une
Fragment
de sorte que vous pouvez avoir à modifier si pour uneActivity
mais je pense qu'il communique l'idée de base.J'ai essayé exactement le même code que vous utilisez et il fonctionne très bien pour moi. Les seules choses qui peut-être différent, ce sont deux choses:
1) le refresh_action_view mise en page (voici le mien pour la comparaison):
2) L'affichage des options de votre barre d'action (voici mon styles.xml à titre de comparaison).
Pouvez-vous partager le vôtre?