Я пытаюсь сделать свой собственный базовый «наложение справки». Я до сих пор этого добился Android addView StackOverFlow Ошибка
это было сделано путем вызова addContentView
с экземпляром пользовательского представления, переданного в. Однако я смогу скрыть только пользовательское представление, а не полностью удалить его после того, Это.
Это очень простой подход, так что пока нет никакого таланта или пизажа. Я пытаюсь еще больше улучшить его простоту использования. https://stackoverflow.com/a/10217050/3194316 Этот ответ переполнения стека предлагает настроить просмотр содержимого динамически созданного Framelayout и раздувать представления. Я добавил код
FrameLayout layout = new FrameLayout((Context) activity);
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(layoutParams);
View parentView = activity.getWindow().getDecorView().findViewById(android.R.id.content);
((ViewGroup) parentView.getParent()).removeAllViews();
activity.setContentView(layout);
layout.addView(parentView);
layout.addView(this);
где this
является экземпляром пользовательского вида, который устанавливает накладку, показанный ниже. activity
- это экземпляр действия, в котором это представлено. Сначала я получил сообщение об ошибке, что у parentView
уже был родитель, поэтому вот почему добавлен View parentView = activity.getWindow().getDecorView().findViewById(android.R.id.content); ((ViewGroup) parentView.getParent()).removeAllViews();
. Теперь я, к счастью, получаю ошибку переполнения стека, и я не могу понять, почему. Есть ли лучший подход к этой ситуации?
РЕШЕНИЕ
Обертывания все во всплывающем окне позволяют весь оверлею быть уволенными должным образом андроида системы.
FrameLayout layout = new FrameLayout(context.get());
FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
layout.setLayoutParams(layoutParams);
LayoutInflater inflater = (LayoutInflater) context.get().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
View overlayBase = inflater.inflate(R.layout.help_frame, null, false);
layout.addView(this);
layout.addView(overlayBase);
popupWindow = new PopupWindow(context.get());
popupWindow.setContentView(layout);
popupWindow.setWindowLayoutMode(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT);
popupWindow.showAtLocation(this, Gravity.CENTER, 0, 0);
контекста был переменным WeakReference уровня класса для пользовательского вида, экземпляр, когда конструктор был назван
В случае, если кто заинтересован, вот код, который я использовал для создания popupwindow
Здесь есть (не конечный) результат
Я не понял, чего именно вы пытаетесь достичь, но вы делаете это неправильно. Вы считаете PopupWindow? –
В основном выделить определенный элемент на экране [См. Здесь] (http://acko.net/files/android/app-drawer.png). Честно говоря, я не знал о всплывающем окне. Выглядит интересно. – rperryng
на скриншоте выше, это просто полноэкранный наложение ImageView. Во всяком случае, взгляните на PopupWindow. Насколько я понимаю, вам нужно показать некоторое всплывающее окно, привязанное к представлению. Вот что он делает. –