2010-10-22 44 views
8

Vì vậy, tôi thấy chúng ta có thể có các cảnh báo với màu nền xám và trắng (khi setinverse ...).Android - Màu nền AlertDialog tùy chỉnh

Để tìm hiểu lý do tại sao tôi đã kiểm tra themes.xml của sdk, kiểm tra xem tôi đã được dẫn đến drawables và ở đó tôi nhận ra nền alertdialog không được thực hiện theo chương trình nhưng thông qua một số hình ảnh. Và những hình ảnh này đảm bảo rằng có hai đường kẻ ngang màu xám (hoặc màu trắng khi nghịch đảo) ở trên cùng (vùng tiêu đề) và phía dưới (chỉ trên vùng nút) của hộp thoại khi chúng ta sử dụng LayoutInflater để chỉ thiết lập màu nền khác. Vì vậy, câu hỏi của tôi là, vì LayoutInflator là vô ích và đoán tôi phải phân lớp alertdialog, bạn đề nghị tôi làm gì để tạo ra một AlertDialog với một backgroundcolor khác nhau? Tôi nên ghi đè điều gì?

Trả lời

17

Thay vì sử dụng AlertDialog, tôi đã kết thúc bằng cách sử dụng Hộp thoại. Để có được một cái nhìn tùy chỉnh:

1-Tạo Dialog và loại bỏ các vùng tiêu đề (Nếu không, bạn sẽ nhận được một vùng màu xám trắng trên đầu trang):

myDialog = new Dialog(this); 
myDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 

2-Thiết kế một bố trí trong xml, và đặt làm nội dung của hộp thoại:

myDialog.setContentView(R.layout.mydialog_layout); 

3-Nếu bố cục không được làm tròn, nó sẽ giao nhau với các góc tròn của hộp thoại. Vì vậy, thiết kế bố trí như một rect tròn:

trong mydialog_layout.xml:

android:background = "@layout/mydialog_shape" 

mydialog_shape.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" 
    > 
    <gradient android:startColor="#FF0E2E57" 
    android:endColor="#FF0E2E57" 
      android:angle="225" android:paddingLeft="20dip"/> 

    <corners android:bottomRightRadius="5dp" android:bottomLeftRadius="5dp" 
    android:topLeftRadius="5dp" android:topRightRadius="5dp" android:paddingLeft="20dip"/> 
</shape> 

4-Thêm người nghe đến các nút trong hoạt động của bạn:

Button button = (Button)myDialog.findViewById(R.id.dialogcancelbutton); 
button.setOnClickListener(new OnClickListener() { 
@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 
    myDialog.cancel(); 
}}); 

Đó là về nó.

+0

Có gì với 'yasalUyariDialog'. phần trên? Có vẻ như một chút ngẫu nhiên? –

+0

vâng hoàn toàn xin lỗi về điều đó.fixed –

+0

Bạn cũng có thể làm điều này với cảnh báo ... bạn chỉ cần thổi phồng bố cục đầu tiên với layoutinflator và sau đó nó là như nhau nhưng dễ dàng hơn để chỉ định một biểu tượng và tiêu đề. – trgraglia

0

Tôi nhớ lại rằng không phải tất cả các Hộp thoại Android đều được tạo ra như nhau. Do đó, nếu bạn không muốn sử dụng hộp thoại đi kèm với phiên bản Android của thiết bị; Bạn cần mã hóa một hộp thoại hoàn toàn mới từ đầu.

Chỉnh sửa:

Tôi nghĩ bạn cần ghi đè lên onCreateDialog với lớp trình tạo hộp thoại tùy chỉnh. Như tôi đã nói, tôi chưa bao giờ làm điều đó. Hãy nhớ rằng, để giữ với phong cách Android MVC, bạn cũng cần định nghĩa hộp thoại trong XML. Nếu tôi định làm điều đó; Tôi có lẽ sẽ bắt đầu với cách bố trí XML, sau đó mã một lớp hộp thoại tùy chỉnh bằng cách sử dụng các phương thức giống như một lớp trình xây dựng hộp thoại thông thường. Xin lỗi vì quá mơ hồ, tôi vẫn tự học Java và Android.

+0

+1 Thx cho câu trả lời. Vậy phương pháp nào tôi nên ghi đè để có được hộp thoại tùy chỉnh chức năng? –

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