2010-04-24 5 views
10

J'écris une application Android et je voudrais placer une boîte de dialogue ou une vue sur l'écran d'accueil afin qu'un utilisateur puisse entrer du texte sans sauter dans mon application complète. Je n'arrive pas à faire marcher ça. Si je présente un dialogue (même dans une activité transparente), mon application se lance.Comment font-ils? Dialogues sur l'écran d'accueil

Si vous ne savez pas de quoi je parle, jetez un oeil au widget Facebook. Je veux reproduire un comportement similaire au clic sur "Qu'est-ce que tu penses?" boîte.

Merci pour toute aide à l'avance!

-Brian

+0

"Si je vous présente une boîte de dialogue (même dans une activité transparente), mes lancements d'application." Qu'est-ce que cela signifie pour toi? Pour moi, une "application" va devoir être lancée, sinon votre code ne fonctionnera pas. – CommonsWare

Répondre

10

Mon problème était que l'application toujours lancée pour afficher la boîte de dialogue.

Pour résoudre ce problème, j'ai défini le mode de lancement de l'activité sur singleInstance dans le manifeste. Maintenant, il montre le dialogue sur l'écran d'accueil!

+0

Bien que ça marche, ça fait bug dans l'andoid 6, (oui, j'ai vu que c'est une question aold, mais google doent care ...). Vous devez utiliser 'documentLaunchMode' pour l'empêcher de surcharger votre propre application dans les "Recent Screens" (surtout si vous utilisez aussi excludeFromRecents). – Remy

7

Ils sont le lancement d'une activité, mais ils ont mis le thème de l'activité de sorte qu'il ressemble à une boîte de dialogue.

Dans votre manifeste, vous devez ajouter quelque chose comme ça sous la balise <activity>: android:theme="@android:style/Theme.Dialog"

+0

Merci, mais comment démarrer une activité à partir de mon widget d'application? Je n'arrive pas à comprendre les intentions en suspens. Merci! –

3

Merci beaucoup, j'ai essayé avec Theme.Dialog

<activity android:name=".language" 
      android:label="@string/app_name" 
      android:theme="@android:style/Theme.Dialog"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
    </activity> 

Mais dans mon code, il y a 2 différentes fenêtres flottantes: ma disposition et la tuile. Voici le code suivant:

import android.app.Activity; 
import android.os.Bundle; 
import android.content.Intent; 
import android.app.Dialog; 

public class language extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     // setContentView(R.layout.main); 
     Dialog dialog = new Dialog(this); 
     dialog.setContentView(R.layout.main); 
     dialog.setTitle("Raygional"); 
     dialog.show(); 

    } 
} 

PS: Je sais que cela devrait être une question plutôt qu'une réponse

+4

alors pourquoi l'avez-vous posté comme réponse? –

+1

Il peut intéresser d'autres qui veulent faire un dialogue sur l'écran d'accueil. –

0

Utilisation du service pour cette

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
this.getApplicationContext().startActivity(intent); 

ci-dessous quelques recueil HSC

public class HomepopupDataService extends Service { 

private static final String TAG = "HomepopupDataService"; 

@Override 
public void onCreate() { 
    Log.i(TAG, "Service onCreate"); 
} 


@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    // TODO Auto-generated method stub 
    Log.i(TAG, "Service onStartCommand"); 

    CountDownTimer dlgCountDown; 
    Log.e("---------------", "onHandleIntent"); 
    dlgCountDown = new CountDownTimer(10000, 1000) { 
     public void onTick(long millisUntilFinished) { 
      Log.e("---------------", "onHandleIntent++"); 
     } 

     public void onFinish() { 
      Intent i = new Intent(getApplicationContext(), 
        DialogActivity.class); 

      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      getApplicationContext().startActivity(i); 
     } 
    }.start(); 
    return super.onStartCommand(intent, flags, startId); 
} 

@Override 
public IBinder onBind(Intent arg0) { 
    // TODO Auto-generated method stub 
    Log.i(TAG, "Service onBind"); 
    return null; 
} 

@Override 
public void onDestroy() { 
    Log.i(TAG, "Service onDestroy"); 
} 

} 

Questions connexes