2010-06-10 6 views
9

나는 onListItemClick 이벤트의 listactivity에서 팝업 창을 만들고 있습니다.android의 팝업 창 크기

LayoutInflater inflater = (LayoutInflater) 
this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
View pop = inflater.inflate(R.layout.popupcontact, null, false); 
ImageView atnot = (ImageView)pop.findViewById(R.id.aNot); 
height = pop.getMeasuredHeight(); 
width = pop.getMeasuredWidth(); 
Log.e("pw","height: "+String.valueOf(height)+", width: "+String.valueOf(width)); 
atnot.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     pw.dismiss(); 
    } 
}); 

pw = new PopupWindow(pop, width, height, true); 

// The code below assumes that the root container has an id called 'main' 
//pw.showAtLocation(v, Gravity.CENTER, 0, 0); 
pw.showAsDropDown(v, 10, 5); 

높이 및 너비 변수는 팝업 창 (popupcontact)에 사용 된 레이아웃의 높이 및 너비로 간주됩니다. 하지만 그들은 0을 반환합니다. 레이아웃이 아직 렌더링되지 않았기 때문입니다. 아무도 단서를 가지고, 어떻게 절대 픽셀 번호를 사용하지 않고도 팝업 창의 크기를 제어 할 수 있습니까?

답변

2

팝업 창의 하위 뷰인 너비와 높이를 얻으려고하기 때문에 코드가 작동하지 않을 것이라고 생각합니다.

popupwindow를 "v"보기에 고정시킬 것이므로 앵커보기 (또는 그 비율에 따라 비율)로 너비와 높이를 설정할 수 있습니까?

1

팝업 창을 만들려면 Creating Dialogs을 살펴보십시오. 대화 상자에서 완전한보기를 사용하려면이 question을보십시오. 허용되는 대답에 대한 설명을 읽으십시오. 나는이 뷰를 생성하기 위해 PopupWindow를 사용할 필요가 없다고 생각하며, 대화 상자는 결과를 훨씬 쉽게 얻을 것입니다.

PopupWindow를 고수하고 팝업 창의 너비와 높이를 변경하지 않으려면 PopupWindow에 다른 constructor을 사용하십시오. 높이와 너비가 필요없는 것도 있습니다. 그들은 창을 집중시키는 능력에 대해 부울을 취하지 않지만 나중에 setFocusable()을 통해이를 변경할 수있는 것 같습니다.

43

비슷한 문제가있었습니다. 나는 호출하여 그것을 해결 :

pop.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); 

+2

암 같은 문제에 직면) getMeasuredHeight()와 getMeasuredWidth (와 레이아웃의 크기를 얻기 전에. 이것은 작동하지만, 원래의 – vignesh

+1

위의 코드가 널 포인터 예외가되는 높이를 줄입니다. – Amrut