2010-04-24 4 views
10

Ich schreibe eine Android-Anwendung und möchte einen Dialog oder eine Ansicht über den Startbildschirm platzieren, damit ein Benutzer Text eingeben kann, ohne in meine vollständige Anwendung zu springen. Ich kann das nicht zur Arbeit bringen. Wenn ich einen Dialog vorstelle (auch in einer transparenten Aktivität), wird meine Anwendung gestartet.Wie machen sie das? Dialoge über den Startbildschirm

Wenn Sie nicht wissen, wovon ich spreche, werfen Sie einen Blick auf das Facebook-Widget. Ich möchte ein ähnliches Verhalten replizieren wie das Klicken auf "Was ist in deinem Kopf?" Box.

Vielen Dank für jede Hilfe im Voraus!

-Brian

+0

"Wenn ich präsentieren ein Dialog (auch in einer transparenten Aktivität), meine Anwendung startet." Was bedeutet das für dich? Für mich wird eine "Anwendung" gestartet *, sonst wird Ihr Code nicht ausgeführt. – CommonsWare

Antwort

10

Mein Problem war, dass die Anwendung immer den Dialog gestartet angezeigt werden soll.

Um dies zu lösen, habe ich den Aktivitäts-Modus auf singleInstance im Manifest gesetzt. Jetzt zeigt es den Dialog über den Home-Bildschirm!

+0

Altought es funktioniert, es macht Bug in Andoid 6, (ja, ich sah es ist eine aalt Frage, aber google doent care ...). Sie müssen 'documentLaunchMode' verwenden, um zu verhindern, dass es Ihre eigene Anwendung in den "Letzten Bildern" überdeckt (besonders wenn Sie auch excludeFromRecents verwenden). – Remy

7

Sie sind startet eine Aktivität, aber sie haben die Tätigkeit des Themas so eingestellt, dass es wie ein Dialog aussieht.

In Ihrem Manifest, haben Sie so etwas wie dies unter dem <activity> Tag hinzuzufügen: android:theme="@android:style/Theme.Dialog"

+0

Danke, aber wie starte ich eine Aktivität von meinem App-Widget? Ich kann die bevorstehenden Absichten nicht verstehen. Vielen Dank! –

3

Vielen Dank, ich mit 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> 

Aber in meinem Code versucht, gibt es 2 verschiedene schwebende Fenster: mein Layout und die Kachel. Hier ist der folgende Code:

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: Ich weiß, dass dies eine Frage sein soll, anstatt eine Antwort

+4

warum hast du es dann als Antwort gepostet? –

+1

Es könnte andere interessieren, die einen Dialog über Homescreen machen wollen. –

0

Verwenden Dienst für die

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

Nachfolgend finden Sie einige code`

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"); 
} 

}