Я использую JobIntentService
, который использует mHandler.post(new Runnable())
, чтобы показать «плавающее окно».
Я хочу, чтобы окно отображалось в течение x секунд, а затем исчезало, до сих пор я использовал Service
и не JobIntentService
, так что это было легко (не требуется обработчик / runnable), теперь, когда Runnable
показывает окно, я заметил, что окно фактически не отображается, пока runnable не завершит свой запуск.
Runnable code
Handler handler = new Handler(Looper.getMainLooper());
handler.post(new Runnable() {
@Override public void run() {
labelsLayer.show();
Thread.sleep(5000);
//labelsLayer.hide();
}
// window attached only after run() completes
}
Вот код для отображения окна
final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
getWindowFlag(),
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.CENTER_HORIZONTAL|Gravity.BOTTOM;
windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
windowManager.addView(frameLayout, params);
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rootView = layoutInflater.inflate(R.layout.overlay_labels_list_layout, frameLayout);
linearLayout = rootView.findViewById(R.id.overlay_labels_layout);
linearLayout.setVisibility(View.GONE);
Animation in = AnimationUtils.loadAnimation(context,
android.R.anim.fade_in);
in.setDuration(500);
linearLayout.setVisibility(VISIBLE);
linearLayout.startAnimation(in);