2010-04-24 2 views
10

Я пишу приложение для Android, и я хотел бы поместить диалог или представление по главному экрану, чтобы пользователь мог вводить текст без перехода в мое полное приложение. Кажется, я не могу заставить это работать. Если я представляю диалог (даже в прозрачной активности), мое приложение запускается.Как они это делают? Диалоги по главному экрану

Если вы не знаете, о чем я говорю, взгляните на виджет Facebook. Я хочу воспроизвести подобное поведение, нажав на «Что у вас на уме?». коробка.

Спасибо за любую помощь заранее!

-Брайан

+0

"Если я представляю диалоговое окно (даже в прозрачной деятельности), мои запуски приложений." Что это значит для тебя? Для меня «приложение» собирается * иметь * для запуска, иначе ваш код не будет запущен. – CommonsWare

ответ

10

Моя проблема заключалась в том, что приложение всегда запущен, чтобы отобразить диалоговое окно.

Чтобы решить эту проблему, я установил режим lauch в singleInstance в манифест. Теперь он показывает диалог на главном экране!

+0

Скорее всего, он работает, он делает ошибку в andoid 6, (да, я видел, что это вопрос, а google doent care ...). Вы должны использовать «documentLaunchMode», чтобы предотвратить его переопределение вашего собственного приложения в «Последние экраны» (особенно если вы также используете excludeFromRecents). – Remy

7

Они являются запускает активность, но они определили тему своей деятельности так, чтобы он выглядит как Dialog.

В манифесте, вы должны добавить что-то вроде этого под <activity> тег: android:theme="@android:style/Theme.Dialog"

+0

Спасибо, но как мне начать работу с виджета моего приложения? Кажется, я не могу разобраться в ожидании намерений. Благодаря! –

3

Спасибо большое, я попытался с 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> 

Но в моем коде, есть 2 разные плавающие окна: мой макет и плитка. Вот следующий код:

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: Я знаю, что это должно быть вопрос, а не ответ

+4

, то почему вы опубликовали его в качестве ответа? –

+1

Это может заинтересовать других, которые хотят сделать диалог по рабочему экрану. –

0

Использование услуги для этого

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

Ниже приведены некоторые 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"); 
} 

} 
Смежные вопросы