Добавить представление поверх всех видов деятельности

Я разрабатываю приложение для Android. Я хочу иметь возможность добавлять один вид по коду, который нарисован в верхней части всех действий в приложении.

Я попытался добавить его в диспетчер окон:

LayoutInflater inflater = activity.getLayoutInflater();
layout = inflater.inflate(R.layout.toast_layout, null);

WindowManager.LayoutParams params = new WindowManager.LayoutParams();
params.gravity = Gravity.BOTTOM;
params.height = WindowManager.LayoutParams.WRAP_CONTENT;
params.width = WindowManager.LayoutParams.WRAP_CONTENT;
params.type = WindowManager.LayoutParams.TYPE_TOAST;
final WindowManager mWindowManager = (WindowManager);
activity.getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
                mWindowManager.addView(layout, params);

Однако, добавляя его так, я сталкиваюсь с двумя проблемами:

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

2. Макет не отвечает на события Click.

Есть ли еще одно решение для этого?

Спасибо.

Ответ 1

Чтобы управлять представлением/представлением представления, я использовал решение, предложенное Гопалом. Я привязывал события onStop и onResume, чтобы скрыть скрытие приложения при выходе из приложения.

Для событий click я понял, что тип тоста не отвечает на события click. Поэтому я изменил тип

params.type = WindowManager.LayoutParams.TYPE_TOAST;

to

params.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT;

Я также должен добавить следующее разрешение:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>

Ответ 2

измените LayoutParams с TYPE_TOAST на TYPE_APPLICATION и удалите предыдущие флаги, которые я предложил,

и создайте один BaseActivity для всех действий в вашем приложении, в этой Деятельности в onResume() добавьте этот вид в WindowManager и в onPause(), удалите этот вид как,

  windowManager.removeView(view);

Ответ 3

1) Создайте BaseActivity, который расширяет Activity.

2) Теперь ваша ваша деятельность должна расширять BaseActivity, а Activity

3) Переопределить метод setContentView().

4) создайте пустую вертикальную линейную задержку в этом методе.

5) Добавьте свой topView в этот макет

6) И затем добавьте завышенный вид в этот linearlayout

7) И, наконец, вызовите super.setContentView(passLinearLayoutHere)

Как это реализовать?

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.LinearLayout;

public class BaseActivity extends Activity {

    @Override
    public void setContentView(int resId) {

        LinearLayout screenRootView = new LinearLayout(this);
        screenRootView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,
                LinearLayout.LayoutParams.MATCH_PARENT));
        screenRootView.setOrientation(LinearLayout.VERTICAL);

        // Create your top view here
        View topView = new View(this); // Replace this topview with your view 

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View screenView = inflater.inflate(resId, null);
        topView.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {
                           //You will get onclick here of your topview in whatever screen it is clicked
            }
        });

        screenRootView.addView(topView);
        screenRootView.addView(screenView);

        super.setContentView(screenRootView);
    }

}