2013-04-20 16 views
5

Sto sviluppando un'applicazione in cui devo mostrare la finestra di dialogo di azione rapida al clic di un pulsante. Ecco un esempio di come voglio implementarlo.Personalizza la finestra di dialogo di azione rapida per Android

What I want to implement.

Fino ad ora non sono riuscito a capire come fare un dialogo azione rapida personalizzata. Ma ho provato a usare un'attività e un po 'quello che sono vicino a quello che devo raggiungere. Ecco cosa ho fatto fino ad ora.

Su clic del pulsante sto passando intento all'attività:

if (v.getId() == R.id.points) { 
     Toast.makeText(MainActivity.this, "Clicked on points", 
       Toast.LENGTH_SHORT).show(); 
     Intent i = new Intent(MainActivity.this, PointsActionMenu.class); 
     startActivity(i); 
    } 

E ho usato styles.xml per rendere l'attività trasparente.

styles.xml

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

L'attuazione di queste cose che ho avuto questa interfaccia utente sul mio schermo. Reached till here

Ora, ho due domande:

  1. ho usato l'attività e progettato un layout a lavorare per le mie esigenze. È c'è un modo semplice per implementare questo utilizzando la finestra di dialogo di azione rapida. I hanno seguito 2-3 esempi per questo, ma non sono stato in grado di personalizzare lo in base alle mie esigenze.
  2. Per quanto ho implementato utilizzando un'attività, viene visualizzato al centro dello schermo, è possibile modificare la posizione predefinita dell'attività nell'angolo destro come mostrato nell'immagine.

Una delle risposte può aiutarmi.

Qualsiasi tipo di aiuto sarà apprezzato per questo.

+0

Hai provato 'Android: gravity' per numero di problema # 2? –

risposta

2

Penso di aver risolto il mio problema. Eccolo ora come sembra.

What I found

integrato il seguente codice per impostare la sua posizione.

WindowManager.LayoutParams wmlp = this.getWindow().getAttributes(); 

    wmlp.gravity = Gravity.TOP | Gravity.LEFT; 
    wmlp.x = 80; // x position 
    wmlp.y = 60; // y position 
+0

Contrassegna la tua risposta come corretta, quindi. –

+0

Lo hai testato su schermi di altre dimensioni e densità? A meno che tu non voglia che funzioni su un singolo dispositivo, questo potrebbe farti venire il mal di testa in seguito. – RobGThai

+0

@Anupam Ho anche sviluppato un simile tipo di finestra di dialogo popup. Puoi condividere il tuo codice della finestra popup? – GrIsHu

2

Si consiglia di considerare cosa succede su diversi dispositivi e dimensioni dello schermo. Considerare scalare i pixel per DP con questo:

int x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()); 
int y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()); 

EDIT:

wmlp.x = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 80, getResources().getDisplayMetrics()); 
wmlp.y = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 60, getResources().getDisplayMetrics()); 
+0

Dove dovrei implementarlo? – Anupam

+0

Ho modificato la mia risposta. - Quella funzione converte qualunque valore "pixel" fornito nel valore "dp" appropriato. – LuckyMe

Problemi correlati