2014-02-13 4 views
1

dialog의 일부 요소 좌표를 찾아야합니다.
하지만 대화 상자가 화면에 표시되기 전에 모든 메서드는 0을 반환합니다.
대화 상자가 화면에 표시되는시기를 어떻게 알 수 있습니까?화면에 대화 상자가 표시되면 Android에서 확인합니다

나는 dialog.show() dialog.isShowing() true를 반환하지만,

int width=mDialog.getWindow().getDecorView().getWidth(); 

의 복귀 후 0

+0

어떤 대화가 조각 대화 상자 또는 간단한 대화 상자입니까? – Triode

+0

간단합니다 [Dialog] (http://developer.android.com/intl/ru/reference/android/app/Dialog.html) – boroloro

+0

onAttachedToWindow() 또는 onLayoutParamsChanged가 도움이 될 수 있지만 대화 상자를 확장해야합니다. – Triode

답변

2

:

이 옵션을 시도 :

final AlertDialog alertDialog = alertDialogBuilder.create(); 
alertDialog.setOnShowListener(new OnShowListener() { 
    @Override 
    public void onShow(DialogInterface dialog) { 
     int width = alertDialog.getWindow().getDecorView().getWidth(); 
     Toast.makeText(getApplicationContext(), String.valueOf(width) Toast.LENGTH_LONG).show();    
    } 
}); 
alertDialog.show(); 
0

나는이에게 자신을 완료하지 않은,하지만 안드로이드에 파고 것을 의미 dev 사이트에서 DialogFragment 클래스를 확장 한 다음 onCreateView 메서드를 재정 의하여 필요한 계산을 얻을 수있는 것처럼 보입니다. 조금 더 작업하지만 대화 상자의 전체 수명주기에 액세스 할 수 있어야합니다.

는 여기를 참조하십시오 : http://developer.android.com/reference/android/app/DialogFragment.html

+0

OP가 간단한 대화 상자를 사용 중입니다 – Triode

0

임은 여전히 ​​노력 .getWidth().getHeight() 내가 그것을 단지 대화를위한이 아닌 활동에서 작동 생각과 내 대화 상자의 크기를 얻을 수 있습니다.

AlertDialog.Builder a = new AlertDialog.Builder(this); 

View v = a.create().getCurrentFocus(); 
v.measure(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); 

int height = v.getMeasuredHeight(); 
int width = v.getMeasuredWidth(); 

또는이 방법 대화 상자가 화면에 표시 될 때 당신은 당신이 setOnShowListener를 통해에서 onShow 이벤트를 수신 시도 할 수 결정해야하는 경우

private int getDialogWidth(Dialog dialog) 
     { 
     DisplayMetrics dm = new DisplayMetrics(); 
     dialog.getWindow().getWindowManager().getDefaultDisplay().getMetrics(dm); 
     String width = "" + dm.widthPixels ; 
     return (Integer.parseInt(width)); 
    } 
+0

대화 상자의 너비를 정확하게 알아야 할 필요가 없습니다. 대화 상자가 화면에 표시 될 때 알아야하고 View.getLocationOnScreen()을 사용합니다. – boroloro

관련 문제