akex Posté(e) 25 juillet 2010 Share Posté(e) 25 juillet 2010 Bonjour à tous, suite à ce post (merci Cyril) : http://android.cyrilmottier.com/?p=274 j'ai décidé de regarder la vidéo du Google IO citée et suite à ça j'ai fait machine arrière sur mon listview expandable pour adopter la quickactionbar. N'ayant pas trouvé les sources de twitter j'ai poursuivis mes recherches et suis tombé sur ces deux pages : - http://code.google.com/p/simple-quickactions/ (une alternative) - http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/ (le premier amélioré) Je vous laisse découvrir tout ça, en espérant que ça vous aide dans le développement de votre UI. Je vous encourage également à utiliser GreenDroid, qui permet déjà d'utiliser simplement dans vos programmes l'actionbar (cf. premier lien). Mon petit doigt me dit que la quickactionbar devrait apparaitre prochainement dans GreenDroid. Quelques images pour vous donner un avant gout de quickaction façon appli contacts / twitter façon gallerie 3D Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
acesyde Posté(e) 25 juillet 2010 Share Posté(e) 25 juillet 2010 Super trouvaille, merci akex ! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 25 juillet 2010 Share Posté(e) 25 juillet 2010 Super effectivement !! J'ai inclus une quick bar de ce genre dans une de mes applis, et j'ai aussi recherché les sources... Et effectivement, on trouve les sources dans l'appli des contacts d'Android, mais ils font un truc super bas niveau, et bien compliqué. Et surtout, je ne comprends pas pourquoi ils n'utilisent pas les popup windows, qui sont faites pour ca... Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Infernus Posté(e) 25 juillet 2010 Share Posté(e) 25 juillet 2010 Super interessant ! merci ;) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 25 juillet 2010 Share Posté(e) 25 juillet 2010 merci! Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 25 juillet 2010 Auteur Share Posté(e) 25 juillet 2010 J'ajoute ma petite correction tant qu'on y est Dans CustomPopupWindow, y a une petite erreur : if (rootHeight > anchorRect.top) { Remplacer par if (rootHeight > anchorHeight) { où anchorHeight = anchor.getTop(); En effet, getLocationOnScreen donne la position sur l'écran et non par rapport au ViewGroup parent (notamment dans le cas d'un listview). Autant se baser sur la place restante dans le parent, c'est plus propre ----> View.getTop(); Exemple : mon cas est composé d'un listview sur lequel j'ai positionné un OnItemClickListener qui déclenche l'affichage d'une quickactionbar. Quand je cliiques sur ma deuxième ligne, il considère qu'il reste assez de place et le quickactionBar dépassé sur ma barre de titre ... Bof. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
popolbx Posté(e) 26 juillet 2010 Share Posté(e) 26 juillet 2010 (modifié) trop cool. j'avais vu la première version, mais la deuxième est effectivement beaucoup plus belle. du coup je l'ai rajouté dans taskiller (désactivable par option), et c'est vrai que ça rend bien. Attention tout de même, dans les Drawables, il en manque un sur les drawable mdpi (le top frame jesaispuquoi). comme je n'ai gardé que les mdpi du coup ça compilait pas. Donc si vous gardez le code de base ça risque d'avoir une tête bizarre sur les petites résolutions...(encoe que le 9 patch va surement corriger naturellement le problème) Modifié 26 juillet 2010 par popolbx Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Cyril Mottier Posté(e) 26 juillet 2010 Share Posté(e) 26 juillet 2010 J'ai envie de dire .. super post ! Merci akex ! A voir si ça fonctionne sous Android 1.5 et supérieur mais je pense que c'est un très très bon début. Mettre ça sous la forme d'une "librairie" pourrait être sympa ;). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
akex Posté(e) 26 juillet 2010 Auteur Share Posté(e) 26 juillet 2010 Quand on passe des heures à chercher sur le net (alors que le deuxième lien donné est dans les tous premiers sortis par Google ... La fatigue surement), faut bien en faire profiter. Je n'ai pas vérifié si certaines images étaient en nine-patch ou non. Y a surement des modifs à apporter pour améliorer encore la chose :). Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 (modifié) Excellent, j'avais passé quelques heures hier à chercher comment faire ces QuickActions, j'étais tombé sur le premier lien et avais décidé de compléter cette première version... heureusement que j'ai fini par regarder ici, tout le boulot que je comptais faire est déjà fait dans le premier lien :p Juste un bug que je ne comprends pas pour le moment : dans le cas des Quickactions façon Gallery3D, si on ne met pas de Drawable dans les ActionItems, ils n'apparaissent pas du tout (alors que le hierarchy viewer les indique bien comme étant créés). Surement un problème de layout. Merci beaucoup Akex ! Modifié 30 juillet 2010 par Nivek Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 30 juillet 2010 Share Posté(e) 30 juillet 2010 Petite touche perso pour corriger un autre problème : la popup ne se ferme pas quand on clique sur un item. Du coup j'ai remplacé dans QuickAction.java : if (listener != null) { container.setOnClickListener(listener); } Par (en ayant pris soin de rajouter l'attribut final sur container et listener) : if (listener != null) { container.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { listener.onClick(container); window.dismiss(); } }); } Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
naholyr Posté(e) 29 août 2010 Share Posté(e) 29 août 2010 (modifié) Salut les djeuns :) J'ai pas mal avancé sur la refonte de mon application, et pour l'occasion j'avais fait une implémentation personnelle des QuickActionWindow. Cette implémentation avait pour objectif de me permettre de répondre à la problématique des "plugins", et j'ai donc mis en place pas mal de fonctionnalités tournant autour des intents. Cela aide cette énième implémentation à ne pas seulement être une redite, et apporte quelques nouvelles idées dans le domaine ;) Voir ici : http://code.google.com/p/horaires-ter-sncf/wiki/QuickActionWindow Le projet complet est sous licence BSD, je n'ai pas spécifiquement licencié cette partie, mais il s'agira dans tous les cas d'une BSD ou équivalente (en tous cas pas une GPL v3 ;)). Morceau choisi typiquement représentatif de l'idée : QuickActionWindow.Advertisement[] ads = new QuickActionWindow.Advertisement[] { new QuickActionWindow.MarketAdvertisement("my.package", ".Activity", getString(R.string.advertisement), getResources().getDrawable(R.drawable.advertisement), "Android Market not found" ), }; // All activities responding to intent will be added as action item in the window. // If activity "my.pkg.Activity" is not found in the IntentItems added to the window, // we'll instead add an item that will open Android Market to the details page of // "my.pkg" when user clicks on item. window.addItemsForIntent(context, intent, errorCallback, advertisements); Modifié 29 août 2010 par naholyr Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
naholyr Posté(e) 3 septembre 2010 Share Posté(e) 3 septembre 2010 Ce sujet est-il mort ou j'arrive totalement après la guerre ? x) Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Pierre87 Posté(e) 3 septembre 2010 Share Posté(e) 3 septembre 2010 pour ma part, j'attend juste que Google nous sorte la classe de manière "officielle"... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
FlorentCode Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 Je ne comprend pas bien la situation: Je suis en train de tater le terrain pour créer une ActionBar avec des quickActions sur ma listView qui fonctionne à l'ancienne (listView+adapter). Mais si je comprends bien la seule manière c'est d'utiliser GreenDroid de Cyril car Google n'a pas sorti la version officielle des ActionBar et QuickActions (alors que L'app Twitter utilise ces fonctionnalités)? J'avoue, je suis un peu perdu. Est-ce que si j'utilise la méthode de Cyril pour faire mon ActionBar je pourrais ensuite faire mes QuickAction comme ceci http://www.londatiga.net/it/how-to-create-quickaction-dialog-in-android/ sans soucis? Surtout que GreenDroid permet la création de ListView assez facilement... Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
FlorentCode Posté(e) 17 septembre 2010 Share Posté(e) 17 septembre 2010 Bon aprés quelques recherches j'ai compris la situation :| Problème du jour: J'ai mis en place un système de QuickAction dans ma listView mais je n'arrive pas à mettre plus de 2 items...que dois-je changer pour en ajouter davantage? Merci d'avance, Florent Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
FlorentCode Posté(e) 19 septembre 2010 Share Posté(e) 19 septembre 2010 Bon aprés quelques recherches j'ai compris la situation :| Problème du jour: J'ai mis en place un système de QuickAction dans ma listView mais je n'arrive pas à mettre plus de 2 items...que dois-je changer pour en ajouter davantage? Merci d'avance, Florent Fix it OK, j'ajoutais le bon en déclarant le mauvais. Sorry for that. Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 21 septembre 2010 Share Posté(e) 21 septembre 2010 Juste un bug que je ne comprends pas pour le moment : dans le cas des Quickactions façon Gallery3D, si on ne met pas de Drawable dans les ActionItems, ils n'apparaissent pas du tout (alors que le hierarchy viewer les indique bien comme étant créés). Surement un problème de layout. Effectivement, j'ai le meme bug, et je ne le comprends pas trop pour le moment ! Bon, au pire, je me trouve une mini icone à mettre... Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Alocaly Posté(e) 12 octobre 2010 Share Posté(e) 12 octobre 2010 Juste un bug que je ne comprends pas pour le moment : dans le cas des Quickactions façon Gallery3D, si on ne met pas de Drawable dans les ActionItems, ils n'apparaissent pas du tout (alors que le hierarchy viewer les indique bien comme étant créés). Surement un problème de layout. Je viens de trouver, en fignollant 'SpyMyApps', le pourquoi du comment : Dans ActionItem.xml, il y a une imageview et un textview. L'image view a en height 'wrap_content', et le text view a 'fill_parent'. Donc si tu ne mets pas d'images => pas de contenu, le parent fait 0 de hauteur, et on ne voit rien. La solution : mettre wrap_content dans le text view aussi ! Emmanuel / Alocaly Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Nivek Posté(e) 29 octobre 2010 Share Posté(e) 29 octobre 2010 (modifié) Nouvelle pierre à l'édifice (malheureusement dispersé) : une p'tite méthode à rajouter dans QuickAction.java pour remplacer les imposantes Action Chooser standard par une jolie popup QuickAction : /** * Builds a QuickAction bubble containing all possible activities for a * given intent. * * @param view * The view which triggers the QuickAction bubble. * @param intent * The intent you want to send. * @param excludeSelfPackage * Set this to true if you need to exclude your application's own * activities from this chooser. * @return The QuickAction containing all the possible actions. You have to * call {@link QuickAction}{@link #show()} then to display the * QuickAction. Be careful, returns null if there is no possible * action so you should test the return value before calling show()! */ public static QuickAction buildChooser(final View view, Intent intent, boolean excludeSelfPackage) { QuickAction qa = new QuickAction(view); PackageManager packageManager = view.getContext().getPackageManager(); String selfPackage = view.getContext().getPackageName(); List<ResolveInfo> list = packageManager.queryIntentActivities(intent, 0); // Sort the list Collections.sort(list, new ResolveInfo.DisplayNameComparator(packageManager)); for (ResolveInfo res : list) { if (!excludeSelfPackage || !res.activityInfo.packageName.equals(selfPackage)) { // Add ActionItem for this intent final Intent finalIntent = new Intent(intent); finalIntent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name)); ActionItem item = new ActionItem(); item.setTitle(res.loadLabel(packageManager).toString()); item.setIcon(res.loadIcon(packageManager)); item.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { view.getContext().startActivity(finalIntent); } }); qa.addActionItem(item); } } if (qa.actionList.size() > 0) { return qa; } else { return null; } } Mon beson initial était de créer un Action Chooser qui permette de ne pas proposer à l'utilisateur un choix dangereux : ma propre activity, d'où le booleen 'excludeSelfPackage'. Au final ça remplace assez avantageusement les Action Chooser d'une manière générale. Exemple d'utilisation: Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("application/zip"); intent.putExtra(Intent.EXTRA_STREAM, album); QuickAction qa = QuickAction.buildChooser(findViewById(R.id.btn_album_share), intent, true); if(qa != null) { qa.show(); } else { Toast.makeText(this, R.string.error_no_send_activity, Toast.LENGTH_LONG).show(); } Côté layout des ActionItems, j'ai pas mal bidouillé aussi et maintenant j'utilise cette version : <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:clickable="true" android:focusable="true" android:background="@drawable/action_item_btn"> <ImageView android:id="@+id/icon" android:layout_width="20sp" android:layout_height="fill_parent" android:layout_gravity="left"/> <TextView android:id="@+id/title" android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:paddingLeft="5dip" android:paddingRight="10dip" android:text="Chart" android:textColor="#fff" android:textSize="20sp"/> </LinearLayout> J'ai fixé la taille du texte et la largeur de l'icône à 20sp qui me semble être une taille correcte pour à la fois la lisibilité et le choix d'un item avec les doigts. J'ai dû fixer la largeur de l'icône car les drawables renvoyés par le packagemanager ont des tailles différentes. Modifié 30 octobre 2010 par Nivek 1 Citer Lien vers le commentaire Partager sur d’autres sites More sharing options...
Recommended Posts
Rejoignez la conversation
Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.