2012-04-08 23 views
9

Los requisitos de diseño son, tener una vista de lista, en los elementos de vista de lista, tener un botón, presionar el botón y, a continuación, mostrar una ventana emergente sobre el botón siempre, no debajo.¿Cómo mostrar PopupWindow siempre sobre el botón (ver)?

En Android, use "showAsDropDown", la pantalla predeterminada de Popupwindow en la parte inferior del botón (Ver o anclar). Pero si la parte inferior no aparece para mostrar, la Ventana emergente aparecerá en la parte superior del botón (Ver o anclar).

onTop = (displayFrame.bottom - mScreenLocation[1] - anchor.getHeight() - yoff) <(mScreenLocation[1] - yoff - displayFrame.top); 

Por lo tanto, de acuerdo con este punto, al trasladar el punto del botón de "setSelectionFromTop", dejar que la evaluación es negativa enougn para mostrar en la parte inferior del botón para lograr la eficacia.

En androide 4.0.3, está bien, el movimiento elemento, y el popupWindow mostrar la nueva posición y aboved, Pero, en Android 2.2, la popupWindow todavía se muestra la prensa Cuando, no la posición después de moverse.

boolean onTop = (displayFrame.bottom - mScreenLocation[1] - v.getHeight() - 0) < (mScreenLocation[1] - 0 - displayFrame.top); 
if(!onTop){ 
mListMain.setSelectionFromTop(mListMain.getPositionForView(v),(displayFrame.bottom - v.getHeight() + displayFrame.top)/2); 
} 

me puede ayudar, cómo para resolverlo .. T_T

Respuesta

5

no puede haber misma situación, pero mi solución es:?!

public class BaloonView extends PopupWindow { 
    public BaloonView(Context context, View content) { 
     super(context); 
     setWidth(WindowManager.LayoutParams.WRAP_CONTENT); 
     setHeight(WindowManager.LayoutParams.WRAP_CONTENT); 
     setTouchable(true); 
     setFocusable(true); 
     setOutsideTouchable(true); 
     setTouchInterceptor(new View.OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
       if (event.getAction() == MotionEvent.ACTION_OUTSIDE) { 
        BaloonView.this.dismiss();     
        return true; 
       }    
       return false; 
       } 
      }); 
    } 

    public void showUnderView(View view, View content) { 
     setBackgroundDrawable(view.getContext().getResources().getDrawable(R.drawable.popup_inline_error_holo_dark)); 
     FrameLayout container = new FrameLayout(view.getContext()); 
     container.addView(content); 
     setContentView(container); 
     int[] location = new int[2]; 
     view.getLocationOnScreen(location); 
     container.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); 
     int xoffset = view.getWidth()/2 - container.getMeasuredWidth()/2; 
     showAsDropDown(view, xoffset, 0); 
    } 
} 
+0

podemos mostrar emergente justo por encima del ancla? Presente este mostrando debajo del ancla. –

Cuestiones relacionadas