Отображение вида в WindowManager, который может появиться за пределами экрана

У меня следующая проблема: у меня есть представление, которое я помещаю в WindowManager, и я хотел бы, чтобы оно переводило анимацию из-за пределов экрана в середину экрана.

К сожалению, что бы я ни делал, вид прилипает к оси.

Это код:

    view = (FrameLayout) LayoutInflater.from(this).inflate(
            R.layout.poke, null);

    final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
            300, 400, WindowManager.LayoutParams.TYPE_PHONE,
            WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
            PixelFormat.TRANSLUCENT);

    params.verticalMargin = -10f;
    params.gravity = Gravity.TOP;

    windowManager.addView(view, params);

Как видите, я пытался играть с маржей (поставьте минус, чтобы она увеличилась).

Кстати - я знаю что некрасиво ставить цифры а не dp в dimen.xml. Это просто тестовый код..


person Nativ    schedule 27.06.2014    source источник


Ответы (2)


Я только что столкнулся с той же проблемой, и фактический флаг:

WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS

Итак, ваш код должен выглядеть так:

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
        300, 400, WindowManager.LayoutParams.TYPE_PHONE,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
        PixelFormat.TRANSLUCENT);
person Joe3112    schedule 08.01.2015

В указанные вами флаги добавьте еще один флаг FLAG_LAYOUT_NO_LIMITS.

Это должно позволить вам размещать свои представления даже за пределами экрана.

Ваш код должен выглядеть так:

final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
     300, 400, WindowManager.LayoutParams.TYPE_PHONE,
     WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
     PixelFormat.TRANSLUCENT);
person Shantanu Saraswat    schedule 14.10.2014
comment
нет ничего похожего на FLAG_LAYOUT_NO_BOUNDS - person Rajnish Mishra; 13.06.2016