2014-02-19 20 views
0

Я пытаюсь сделать свой собственный базовый «наложение справки». Я до сих пор этого добился Take a lookAndroid 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

Здесь есть (не конечный) результат Take a look

+0

Я не понял, чего именно вы пытаетесь достичь, но вы делаете это неправильно. Вы считаете PopupWindow? –

+0

В основном выделить определенный элемент на экране [См. Здесь] (http://acko.net/files/android/app-drawer.png). Честно говоря, я не знал о всплывающем окне. Выглядит интересно. – rperryng

+0

на скриншоте выше, это просто полноэкранный наложение ImageView. Во всяком случае, взгляните на PopupWindow. Насколько я понимаю, вам нужно показать некоторое всплывающее окно, привязанное к представлению. Вот что он делает. –

ответ