2011-08-08 45 views
8

Tôi đã thực hiện một hộp thoại tùy chỉnh.Cách đặt vị trí của hộp thoại?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="myBackgroundStyle" 
     parent="@android:style/Theme.Translucent.NoTitleBar" /> 
</resources> 

screenshot

Dialog dialog = new Dialog(this, R.style.myBackgroundStyle); 
dialog.setContentView(R.layout.dialog); 

dialog.show(); 

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

Nhưng vấn đề là nó xuất hiện ở góc trên bên trái và tôi không thể tìm thấy một cách để đặt nó nơi tôi cần đến nó. params.y=225; params.x=225; bằng cách nào đó không ảnh hưởng đến nó.

Bất kỳ ý tưởng nào?


chỉnh sửa: Nếu tôi có xml như thế (phong cách/Theme.Dialog), sau đó các thông số và làm việc tốt vị trí, nhưng một cái bóng modal xuất hiện. Có cách nào để xóa nó không?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="myBackgroundStyle" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">false</item> 
    </style> 
</resources> 

Trả lời

4

Hãy thử sử dụng Theme.Panel làm kiểu parent của kiểu thay thế.

+0

CẢM ƠN! ĐÃ LÀM VIỆC! :) – Roger

2

không chắc chắn 100%, nhưng có liên quan gì với params.gravity=Gravity.TOP | Gravity.LEFT; không?

khác chỉnh sửa

ok sau đó, chương trình này nên được sử dụng nhiều hơn: Calling android dialog without it fading the background

+0

Không thực sự, giống như trong "Theme.Translucent.NoTitleBar". I E. nếu Theme.Dialog của nó, sau đó params làm việc tốt, nhưng tôi nhận được rằng bóng modal trên tất cả. – Roger

+0

xem các chỉnh sửa ở trên. – Roger

+0

không thực sự. Liên kết về việc loại bỏ bóng nhỏ đó khỏi thanh tiêu đề, trong khi tôi cần phải loại bỏ đổ bóng mô hình (ví dụ: làm tối toàn bộ màn hình phía sau hộp thoại). – Roger

7

Hãy thử tạo một tập mới của các thông số:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

Edit: nếu bạn muốn giữ thuộc tính của cửa sổ, bạn có thể thử thêm dòng này làm dòng thứ hai:

params.copyFrom(dialog.getWindow().getAttributes()); 

Tuy nhiên, lưu ý rằng phương pháp copyFrom hoàn toàn không có giấy tờ, vì vậy tôi không biết liệu nó có làm như vậy không.

+0

không, dường như không hoạt động với "Theme.Translucent.NoTitleBar" – Roger

0

Chỉ cần xóa params.gravity = Gravity.TOP | Gravity.LEFT; và nó sẽ hoạt động. Tôi đã thử.

2

Trong đoạn mã trên dòng ...

dialog.show(); 

nên xuất hiện sau khi

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 
... 

Bởi vẻ của những điều bạn đang hiển thị hộp thoại đầu tiên sau đó thiết lập x, y tọa độ sau khi hộp thoại đã được rút ra màn hình.

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