Blog technique sur mes expériences de développeur.
3 septembre 2013
Cet article fait suite à mon précédent billet expliquant comment intégrer la bibliothèque actionBarCompat dans vos projets.
Dans ce nouvel article nous allons voir comment migrer vos anciens projets sur actionBarSherlock vers actionBarCompat.
La première étape consiste à importer la bibliothèque actionBarCompat dans votre projet Android. Pour ce faire, vous pouvez consulter la première partie de cet article : http://blog.rolandl.fr/1522-android-mise-en-place-de-lactionbarcompat-et-du-navigation-drawer.
Si vous utilisez actionBarSherlock, vos Activity doivent normalement hériter de la classe SherlockFragmentActivity ou SherlockActivity suivant que vous utilisez ou non des fragments. Avec actionBarCompat vos Activity doivent hériter de la classe ActionBarActivity. Pas de panique, vous pouvez utiliser ou non des fragments avec ce nouvel héritage !
Si vous utilisez actionBarSherlock, vos fragments héritent normalement de la classe SherlockFragment. Avec actionBarCompat, vos fragments doivent maintenant hériter de la classe Fragment disponible dans la bibliothèque de compatibilité v4.
Si actionBarSherlock utilise ses propres classes, actionBarCompat utilisent les classes natives pour gérer les menus. Il vous suffit donc de changer les imports actionBarSherlock par les imports android natif.
Ainsi, remplacez :
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
par :
import android.view.Menu;
import android.view.MenuItem;
Toujours dans les menus, vous pouvez noter qu’il n’est plus nécessaire d’utiliser la méthode getSupportMenuInflater(). Vous pouvez utiliser directement la méthode getMenuInflater().
Nous allons maintenant revenir sur les actionView.
Avant vous utilisiez la méthode getActionView() ou setActionView() de votre MenuItem. Par exemple :
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if(R.id.refresh == item.getItemId()) {
item.setActionView(R.layout.progressbar);
}
return super.onOptionsItemSelected(item);
}
Avec actionBarCompat, il vous faudra dorénavant utiliser les méthodes statiques getActionView() ou setActionView() de la classe MenuItemCompat. Par exemple :
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if(R.id.refresh == item.getItemId()) {
MenuItemCompat.setActionView(item, R.layout.progressbar);
}
return super.onOptionsItemSelected(item);
}
Pour finir avec les menus, nous allons revenir sur l’utilisation de l’attribut showAsAction lors de la création du fichier xml d’un menu.
Avec actionBarSherlock, voici ce que vous auriez écrit :
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_navigation_refresh"
android:title="@string/ac_refresh"
android:showAsAction="always"
/>
</menu>
Avec actionBarCompat, nous devons déclarer notre propre namespace XML. Voici ce que ça donne pour pouvoir utiliser cet attribut :
<menu
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myApp="http://schemas.android.com/apk/res-auto"
>
<item
android:id="@+id/refresh"
android:icon="@drawable/ic_navigation_refresh"
android:title="@string/ac_refresh"
myApp:showAsAction="always"
/>
</menu>
La dernière étape consiste à modifier le thème de votre application.
Avec actionBarSherlock, votre thème ressemblait à quelque chose comme ça :
<style name="AppBaseTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar"> ... </style>
Avec actionBarCompat, votre thème ressemble maintenant à ça :
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> ... </style>