2010-08-03 43 views
14

Tôi đang cố tạo hộp thoại tùy chỉnh trong Android. Nhưng bất cứ điều gì tôi đã cố gắng làm, tôi không thể thay đổi chiều rộng của hộp thoại. Nó vẫn giữ nguyên. Sau đây là chế độ xem mà tôi đang đặt làm nội dung cho hộp thoại.Tạo hộp thoại tùy chỉnh trong Android

<RelativeLayout 
android:id="@+id/current_stats" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:visibility="visible"> 
<ImageView android:id="@+id/player_image" 
    android:src="@drawable/person" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true"/> 
<TextView 
    android:id="@+id/player_name" 
    android:layout_below="@id/player_image" 
    android:layout_centerHorizontal="true" 
    android:text="Raja Ram" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
<ImageButton android:id="@+id/dialog_close" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:background="#00000000" 
    android:src="@drawable/close_button_selector"/> 
<ImageButton android:id="@+id/dialog_flip" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentLeft="true" 
    android:background="#00000000" 
    android:src="@drawable/rotate"/> 
</RelativeLayout> 

Như bạn có thể thấy, ở mọi nơi tôi đang sử dụng wrap_content trong mẫu mã này. Ngoài ra tôi đã thử các tùy chọn sau

1) Đặt kiểu tùy chỉnh trong khi tạo Hộp thoại như thế này.

dialog = new Dialog(this,R.style.Theme_Dialog); 

Và phong cách như sau

<resources> 
<style name="Theme" parent="android:Theme"> 
</style> 
<style name="Theme.Dialog"> 
    <item name="android:layout_width">wrap_content</item> 
    <item name="android:layout_height">wrap_content</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item> 
</style> 
</resources> 

2) Thiết lập các tham số cho quan điểm trong onCreateDialog() như thế này

LayoutInflater inflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
v = inflater.inflate(R.layout.player_info, null, false); 
ViewGroup.LayoutParams p = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT,ViewGroup.LayoutParams.WRAP_CONTENT); 
dialog.setContentView(v,p); 

3) Tôi cũng đã cố gắng để thiết lập các cửa sổ các tham số như thế này trong phương thức onCreateDialog()

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.width=WindowManager.LayoutParams.WRAP_CONTENT; 
dialog.getWindow().setAttributes(params); 

Nhưng một lần nữa không may mắn. Ai đó có thể giúp tôi với vấn đề này. Tôi có làm điều gì sai?? Ngoài ra, bạn có thể đề nghị tôi làm thế nào để thiết lập các x và y postions cho cửa sổ Dialog?

Cảm ơn

Trả lời

1

Tôi đã tìm ra vấn đề sau một thời gian dài. Vấn đề là với cách tôi sử dụng bố cục tương đối. Tôi đoán tôi đã không chỉ định vị trí tương đối chính xác. Khi tôi thay đổi đó để bố trí tuyến tính nó làm việc tốt. Nó không sử dụng hết toàn bộ màn hình nhưng chỉ bất cứ thứ gì được yêu cầu.

2

Vấn đề của bạn có chiếm toàn bộ chiều rộng màn hình hay không thể kiểm soát số lượng màn hình đang chiếm?

Để thực hiện hành hoạt động của bạn như một hộp thoại, và không mất trọn vẹn với bạn nên thiết lập hoạt động của bạn để có theme thoại trong biểu hiện:

<activity android:theme="@android:style/Theme.Dialog"> 

Hộp thoại sẽ lớn như là cần thiết theo bố cục của bạn. Nếu bạn muốn nó được rộng hơn, bạn cần phải làm cho bố cục của bạn rộng hơn. (Điều chỉnh kích thước của hình ảnh, thêm đệm, vv).

Tôi không biết cách định vị cửa sổ hộp thoại .. Tôi nghĩ nó luôn được căn giữa, nhưng tôi có thể sai.

+0

Cảm ơn bạn đã trả lời ur. Vấn đề của tôi là tôi muốn nó giống như một cửa sổ bật lên. Thay vì sử dụng hết toàn bộ chiều rộng của màn hình, tôi chỉ muốn nó chỉ tiêu thụ chiều rộng cần thiết để giữ chế độ xem. Và tôi không bắt đầu một hoạt động riêng biệt trong hộp thoại đó. Tôi quan tâm đến việc hiển thị cửa sổ cho phép người dùng thực hiện một số hành động và nên cho phép vài hoạt ảnh.Tôi thậm chí đã thử PopupWindow nhưng vì một số lý do, hoạt hình tùy chỉnh của tôi không hoạt động với cửa sổ bật lên. Hy vọng tôi đã thực hiện yêu cầu của tôi rõ ràng. Bạn có đề nghị nào không? – rajaramyadhav

+0

Hoạt động theo chủ đề của hộp thoại sẽ trông giống như cửa sổ bật lên. Câu hỏi này cho thấy một ví dụ về nó sẽ trông như thế nào: http://stackoverflow.com/questions/1967085/android-how-to-resize-dialog. –

0

tôi có thể thay đổi chiều rộng, chiều cao và vị trí của các Dialog sử dụng GetWindow(). SetAttributes (params)

31
 dialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar); 

     dialog.setContentView(R.layout.custom_dialog); 

     LayoutParams lp=dialog.getWindow().getAttributes();  
     lp.x=100;lp.y=100;lp.width=100;lp.height=200;lp.gravity=Gravity.TOP | Gravity.LEFT; 
     lp.dimAmount=0;    
     lp.flags=LayoutParams.FLAG_LAYOUT_NO_LIMITS | LayoutParams.FLAG_NOT_TOUCH_MODAL; 
    // dialog.getWindow().setAttributes(lp); 

     dialog.show(); 

này làm việc tốt cho tôi ....

+0

Kỹ thuật đẹp! –

+0

Good.Thanks bạn đã tiết kiệm thời gian của tôi – Piraba

+0

Làm việc tốt sau khi chỉnh sửa một chút để phù hợp với nhu cầu của tôi +1 – user577732

-3

trong phương pháp onCreate() của lớp hộp thoại tùy chỉnh yout làm tiếp theo

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
getWindow().setLayout(x, y); 
} 
Các vấn đề liên quan