Autore Topic: [facile] Context Rail e Popup Menu (aka QuickActions)  (Letto 7260 volte)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
[facile] Context Rail e Popup Menu (aka QuickActions)
« il: 24 Settembre 2010, 19:55:01 CEST »
+19
Livello di difficoltà: facile
Target SDK: 8
Min SDK: 4
Licenza: New BSD License
Link ai sorgenti: cliccami

Ok, nell'attesa che Context Rail e Popup Menu vengano inseriti all'interno dell'SDK, ecco a voi le istruzioni su come utilizzarli già ora nelle vostre applicazioni ;)


Per la realizzazione di questo tutorial mi sono basato sui sorgenti messi a disposizione da londatiga in questo articolo.

Differenze rispetto ai sorgenti di londatiga
A quei sorgenti ho poi apportato svariate modifiche, tra cui:
  • Unione di Context Rail e Popup Menu (chiamati entrambi Quick Actions da londatiga) in un unico progetto
  • Posizionate le scritte sotto l'icona nei Context Rail
  • Allargata la riga del Context Rail a 68dp
  • Possibilità di utilizzare immagini fino a 40px in mdpi (60 in hdpi)
  • Testo e immagini sempre centrate all'interno del rail
  • Altezza del rail sempre di almeno 68dp
  • Immagini sia mdpi che hdpi per il Popup Menu
  • Pulizia e riordino dei file di risorse

Come utilizzarli
Per poterli utilizzare all'interno dei nostri programmi si deve per prima cosa copiare i file resources necessari all'interno del nostro progetto.
In particolare si dovrà copiare:
  • L'intera directory anim
  • Tutte le directory drawable, avendo però cura di eliminare i files che iniziano per ic*
  • I vari files di layout, escluso ovviamente il main
  • Il file styles.xml presente all'interno della directory values

Terminata la copia dei files di risorse si dovrà copiare il package net.londatiga.android all'interno della directory src del nostro progetto.

Fatto questo dovremmo essere in grado di creare oggetti ActionItem, ContextRail e PopupMenu.

Procediamo con la creazione delle voci da inserire all'interno dei menu (si usa lo stesso oggetto sia per Context Rail che per Popup Menu):
Codice (Java): [Seleziona]
ActionItem ai = new ActionItem();
ai.setTitle("Titolo");
ai.setIcon(getResources().getDrawable(R.drawable.mia_icona));
ai.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
                // Fa qualcosa
        }
});

Creato l'oggetto lo inseriamo all'interno del Context Rail:
Codice (Java): [Seleziona]
ContextRail cr = new ContextRail(v);

cr.addActionItem(ai);                          

cr.show();

o del Popup Menu:
Codice (Java): [Seleziona]
PopupMenu pm = new PopupMenu(v);

pm.addActionItem(ai);

pm.show();

Fine, facile no?  :D

Sorgenti:
Sono veramente tanti, meglio sfogliarli direttamente su Google Code.

Bibliografia:
« Ultima modifica: 24 Settembre 2010, 20:17:29 CEST da JD »
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #1 il: 24 Settembre 2010, 20:33:00 CEST »
0
Potrebbe essere utile creare un jar con all'interno il codice pronto all'uso :)

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #2 il: 24 Settembre 2010, 20:46:55 CEST »
+1
Fai pure ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #3 il: 24 Settembre 2010, 20:56:53 CEST »
0
Dopo tutto il lavoro fatto su questo tema un +1 é d'obbligo.
Decisamente ottimo tutorial.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline JD

  • Amministratore
  • Utente storico
  • *****
  • Post: 1600
  • Respect: +232
    • leinardi
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 5
  • Sistema operativo:
    L'ultima Ubuntu
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #4 il: 24 Settembre 2010, 21:13:19 CEST »
0
Grazie blackgin ;)
È stata trovata una soluzione al tuo problema?
Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato ;).
E se hai aperto tu il thread marcalo come risolto cliccando !

Offline acquariusoft

  • Utente normale
  • ***
  • Post: 157
  • Respect: +2
    • Mostra profilo
    • Visita il mio blog
  • Dispositivo Android:
    Galaxy ace, Asus eee transformer
  • Play Store ID:
    acquariusoft
  • Sistema operativo:
    Windows 7
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #5 il: 25 Settembre 2010, 08:39:28 CEST »
0
ottimo!!
per me è un +10 :D

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #6 il: 26 Settembre 2010, 11:14:21 CEST »
0
Fai pure ;)

Appena ho tempo... stavo valutando come fare in modo che rimanga possibile personalizzare la grafica.

Offline Pinabello

  • Nuovo arrivato
  • *
  • Post: 22
  • Respect: +12
    • Mostra profilo
  • Dispositivo Android:
    Htc Dream Tim
  • Sistema operativo:
    Mac os X
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #7 il: 27 Settembre 2010, 15:36:25 CEST »
0
 :-) Veramente bello, proverò subito ad utilizzarlo.....

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #8 il: 15 Novembre 2010, 20:06:14 CET »
0
cavolo,vedo ora che c'è un tutorial...ho sbattuto la testa tutto il giorno per inserirci un layout personalizzato in sto cavolo di quickaction...
praticamente volevo che invece di avere una riga di azioni come nel primo screen, venisse fuori un layout personalizzato che mostrava delle info da un oggetto preso dal mio database. Avevo il problema che se inserivo il mio popup_item.xml come view del viewgroup, questo layout non riempiva totalmente lo schermo (anche con width=fill_parent).
Ho poi risolto togliendo le immagini e impostando invece che una groupView semplicemente la mia view, il problema è che è tutto in un file xml e è brutto da vedere... devo cercare come settare una view di un xml dentro ad un linear layout...
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline -Bruno90-

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC wildfire
  • Sistema operativo:
    Windows XP
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #9 il: 22 Novembre 2010, 14:45:10 CET »
0
Ciao
Grazie per il tutorial!! veramente utile.
Ho solo un problema:
quando dici:
"Terminata la copia dei files di risorse si dovrà copiare il package net.londatiga.android all'interno della directory src del nostro progetto."

io ho fatto un semplice copia e incolla nella directory scr del mio progetto, in eclipse il nuovo package si vede ma i file . java nn vengono compilati perchè nn riescono a vedere il file R.java
es: nel file CustomPopUpWindow.java l'istruzione
Codice (Java): [Seleziona]
window.setAnimationStyle(R.style.Animations_PopDownMenu_Left); nn viene compilata perchè R cannot be resolved, e così tt gli altri 3 file del package.
dove sbaglio???
saluti

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #10 il: 27 Novembre 2010, 23:37:01 CET »
0
mi accorgo solo ora di questo fantastico tutorial. Proprio perchè stavo cercando info sulle quickcontactbadge di Android e mi stavo chiedendo appunto, perchè non sia inserite nell'SDK come view standard customizzabile dal programmatore... a volte Google/Android mi stupisce.

Quindi non posso che ringraziarti JD e darti un bel +1 ;-)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #11 il: 28 Novembre 2010, 13:36:14 CET »
0
Proprio perchè stavo cercando info sulle quickcontactbadge di Android e mi stavo chiedendo appunto, perchè non sia inserite nell'SDK come view standard customizzabile dal programmatore... a volte Google/Android mi stupisce.

C'è da dire che se lo mettessero direttamente nell'SDK sarebbero utilizzabili solo sull'API level in cui sono stati introdotti. In questo modo si può usare su qualsiasi API level :)

Offline noodles

  • Utente junior
  • **
  • Post: 130
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Google Nexus One
  • Sistema operativo:
    Mac OS X Snow Leopard
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #12 il: 28 Novembre 2010, 13:46:18 CET »
0
si è vero, però così facendo Android da un punto di vista della UI non cresce mai e i vari marchi non sono nemmeno stimolati ad aggiornare i propri dispositivi, fomentando di fatto la "frammentazione". Il discorso che fai è comunque giusto finchè rimaniamo nella 2.x. Mi aspetto per esempio che da HoneyComb 3.0 vengano introdotte nuovi elementi, tipo per esempio questo. 

Ora rischiamo di andare OT. Nella nuova app che sto sviluppando li proverò sicuramente!  8-)

Offline -Bruno90-

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC wildfire
  • Sistema operativo:
    Windows XP
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #13 il: 03 Dicembre 2010, 14:47:19 CET »
0
Off-Topic:
ma i file . java nn vengono compilati perchè nn riescono a vedere il file R.java

Ho risolto copiando anche R.java di londatiga, ora il problema è un altro:
se scrivo il mio file es: MainActivity.java direttamente nel package di londatiga tutto funziona correttamente, se invece tengo 2 package e faccio gli import crasha l'applicazione e il logcat dice nullpointer exception.
Posto il codice:
QuickAction2.java
Codice (Java): [Seleziona]
package pack.QuickAction2;

import java.util.ArrayList;
import java.util.HashMap;

import net.londatiga.android.ActionItem;
import net.londatiga.android.QuickAction;
import net.londatiga.android.R;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;

public class QuickAction2 extends Activity {
    /** Called when the activity is first created. */
        ArrayList<HashMap<String, String>> ListaAtt=new ArrayList<HashMap<String,String>>();
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        final ActionItem dettagli = new ActionItem();
               
                dettagli.setTitle("Dettagli");
                dettagli.setIcon(getResources().getDrawable(R.drawable.chart));
                dettagli.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                Toast.makeText(QuickAction2.this, "Dettagli" , Toast.LENGTH_SHORT).show();
                        }
                });
               
               
                final ActionItem cancella = new ActionItem();
               
                cancella.setTitle("Products");
                cancella.setIcon(getResources().getDrawable(R.drawable.production));
                cancella.setOnClickListener(new OnClickListener() {
                        @Override
                        public void onClick(View v) {
                                Toast.makeText(QuickAction2.this, "Elemento Cancellato", Toast.LENGTH_SHORT).show();
                        }
                });
       
        HashMap<String,String> itemMap=new HashMap<String, String>();
        for(int i=0;i<10;i++){
                itemMap.put("Nome", "Davide");
                itemMap.put("Cognome", "Scuratti");
                ListaAtt.add(itemMap);
        }
   
            int[] to={R.id.Codice,R.id.Descrizione};
            String[] from={"Nome","Cognome"};
         
            //costruzione dell adapter
            SimpleAdapter adapter=new SimpleAdapter(
                        getApplicationContext(),
                        ListaAtt,//sorgente dati
                        R.layout.itemlayout, //layout contenente gli id di "to"
                        from,
                        to);
           
            ListView l=(ListView)findViewById(R.id.ListView);
            l.setAdapter(adapter);         <--- RIGA 72
            l.setOnItemClickListener(new OnItemClickListener()
            {
                public void onItemClick(AdapterView<?> parent, View v, int position, long id){
                        QuickAction qa = new QuickAction(v);

                                qa.addActionItem(dettagli);
                                qa.addActionItem(cancella);
                                qa.setAnimStyle(QuickAction.ANIM_AUTO);

                                qa.show();
                }
            });
       
           
            Button prova=(Button) findViewById(R.id.prova);
        prova.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                // Perform action on click
                QuickAction qa = new QuickAction(v);

                                qa.addActionItem(dettagli);
                                qa.addActionItem(cancella);
                                qa.setAnimStyle(QuickAction.ANIM_AUTO);

                                qa.show();

            }
        });

    }
}

main.xml
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
        <Button
        android:id="@+id/prova"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Prova"
/>
<ListView
                android:id="@+id/ListView"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent">
</ListView>
</LinearLayout>
Il manifest non l'ho toccato.
il logcat dice:
E/AndroidRuntime(  258): Uncaught handler: thread main exiting due to uncaught e
xception
E/AndroidRuntime(  258): java.lang.RuntimeException: Unable to start activity Co
mponentInfo{pack.QuickAction2/pack.QuickAction2.QuickAction2}: java.lang.NullPoi
nterException
E/AndroidRuntime(  258):        at android.app.ActivityThread.performLaunchActiv
ity(ActivityThread.java:2496)
E/AndroidRuntime(  258):        at android.app.ActivityThread.handleLaunchActivi
ty(ActivityThread.java:2512)
E/AndroidRuntime(  258):        at android.app.Instrumentation.callActivityOnCre
ate(Instrumentation.java:1047)
E/AndroidRuntime(  258):        at android.app.ActivityThread.performLaunchActiv
ity(ActivityThread.java:2459)
E/AndroidRuntime(  258): Caused by: java.lang.NullPointerException
E/AndroidRuntime(  258):        at pack.QuickAction2.QuickAction2.onCreate(Quick
Action2.java:72)
Chi può dirmi qualcosa???

Offline -Bruno90-

  • Nuovo arrivato
  • *
  • Post: 41
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC wildfire
  • Sistema operativo:
    Windows XP
Re:[facile] Context Rail e Popup Menu (aka QuickActions)
« Risposta #14 il: 03 Dicembre 2010, 15:53:36 CET »
0
Ho risolto importando il mio R nell'activity.
Ora però alla pressione del pulsante Prova, o di un item della ListView l'eccezione la solleva l'istruzione qa.show().
Cosa può essere??

PS: Il logcat è praticamente uguale solo che cambia la riga diventando: riga 82.