2012-11-22 53 views
10

Tôi đang tìm kiếm một cách để có được kích thước của một hộp thoại tùy chỉnh. Tôi đã trải qua this câu hỏi, nhưng câu trả lời duy nhất định là khá vô dụng, bởi vì nếu tôi cố gắng mDialog.getWindow().getAttributes().height; nó chỉ trả lại -2, đó là một hằng số cho WRAP_CONTENT thuộc tính mà ta đã đặt cho hộp thoại. Làm thế nào tôi có thể nhận được kích thước của nó. Tôi muốn biết siye cho hình nền.Cách nhận kích thước hộp thoại?

+0

bạn sử dụng chính xác hộp thoại nào? –

+0

public class ControlOverlay kéo dài Dialog, vì vậy chỉ cần Dialog – slezadav

Trả lời

11

Thực tế, trong Android nó không hoạt động giống như trong iOS - bạn không thể có kích thước của chính bản thân View, tuy nhiên, bạn có thể yêu cầu kích thước của bố cục ROOT lượt xem.

ví dụ .:

myDialog.this.findViewById(R.id.dialog_root_layout).getHeight());

+1

Mặc dù nó sẽ trả về kích thước của hộp thoại mà không có một tiêu đề, đó là chính xác những gì tôi cần. – slezadav

+0

@Michal: Tôi nhận được 'dialog_root_layout không thể được giải quyết hay không là một field' cho một' AlertDialog'. –

+0

@ LuisA.Florit Thay vì đưa dialog_root_layout bạn nên chèn ID của hộp thoại của bạn. – Michal

16

Hãy thử:

mDialog.getWindow().getDecorView().getHeight() 
+1

Công trình tuyệt vời thực sự tốt, câu trả lời của Michal là tốt hơn cho trường hợp của tôi mặc dù. – slezadav

+8

@KorniltsevAnatoly: Điều này không làm việc cho tôi. Tôi nhận được 0, –

+0

@Override khoảng trống công khai trênWindowFocusChanged (boolean hasFocus) { super.onWindowFocusChanged (hasFocus); // gọi tại đây } –

4

@Kormilsev Anatoliy đã trả lời chính xác và tôi chỉ được cải thiện. Vì vậy, trong lớp bạn kế thừa từ lớp Dialog chỉ cần ghi đè lên phương thức:

@Override 
public void onWindowFocusChanged (boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    hight = getWindow().getDecorView().getHeight(); 
} 
+0

và cách đặt sự kiện này cho AlertDialog ?? – user924

+1

this 'alertDialog.setOnShowListener (new DialogInterface.OnShowListener() 'sẽ làm việc – user924

+0

Vâng, đây là một quyết định cho hầu hết các AlertDialogs được sử dụng. – CodeToLife

Các vấn đề liên quan