2012-04-08 18 views
9

デザイン要件はlistviewの項目にボタンがあり、ボタンを押してからボタンの上にポップアップウインドウを表示します。ボタン(ビュー)の上にPopupWindowを表示するにはどうすればいいですか?

Androidでは、ボタンの下部にあるポップアップウィンドウのデフォルト表示(表示またはアンカー)である "showAsDropDown"を使用します。 しかし、下に表示する必要がない場合は、ポップアップウィンドウがボタンの上に表示されます(ビューまたはアンカー)。

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

ので、私は、この点によると、判決は有効性を達成するために、ボタンの下に表示するには、no enougnではありませんしましょう、「setSelectionFromTop」でボタンの項目を移動します。アンドロイドで

4.0.3、項目の移動OKです、とpopupwindowは新しい位置を表示し、aboved、 しかし、アンドロイド2.2で 、popupwindowは、移動後の位置、どこを押していない示してまだある。

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); 
} 

私を助けることができる、どのように?!それを解決するために... T_T

答えて

5

が同じではない状況かもしれませんが、私の解決策は次のとおりです。

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

私たちはアンカーの上にポップアップを表示することができますか?アンカーの下にこの1つを表示します。 –

関連する問題