2010-03-06 52 views
17

Tôi đang cố gắng mở hộp thoại khi nhấp vào tiện ích con. Tôi đã giải quyết được vấn đề về skinning hoạt động bắt đầu bằng cách nhấp chuột với android:theme="@android:style/Theme.Dialog". Thật không may tôi không thể tiếp cận cùng một cái nhìn của một hộp thoại.Đặt Hoạt động trên Android trông giống như hộp thoại

Đây là kết quả:

Dialog from widget

Thay vào đó, tôi muốn đạt được kết quả này (trừ các nút, tất nhiên):

Desired dialog from widget

(hộp thoại phụ tùng bạn có thể thấy việc giữ màn hình bị đẩy)

Như bạn có thể thấy có một số khác biệt: màu sắc của các mục danh sách, màu của văn bản và dấu tách mục danh sách. Có một chủ đề/phong cách được xác định trước để có được giao diện tương tự của một hộp thoại chuẩn không? Nếu không, các bước cần làm theo để đạt được kết quả đó là gì?

Tôi đã thấy rằng tiện ích do FoxyRing cung cấp có hành vi mà tôi muốn có.

Trả lời

22

Tại sao không sử dụng Hoạt động chính "truyền thống" với bố cục nền trong suốt

và gọi hộp thoại chuẩn từ nó?

... nếu tôi hiểu chính xác bạn, điều đó sẽ làm cho thủ thuật trở nên dễ dàng, phải không?

+0

Có ... Tôi đoán như vậy ... hãy để tôi cố gắng ... – Matroska

+5

Nó hoạt động. Tôi đã thiết lập một hoạt động với android: theme = "@ android: style/Theme.Translucent.NoTitleBar" và sau đó sử dụng mã đơn giản để tạo hộp thoại danh sách giữ sự chú ý để hoàn thành hoạt động trên hộp thoại hủy/nhấp. – Matroska

+0

rất vui khi biết rằng nó hoạt động theo cách bạn muốn. Chúc mừng, H. – Hubert

3

bạn tự động có thể tạo ra hộp thoại như thế này:

 Context mContext = this; 
     Dialog dialog = new Dialog(mContext); 

     dialog.setContentView(R.layout.data_dialog); 
     dialog.setTitle("Your title"); 

     AlertDialog.Builder builder; 
     AlertDialog alertDialog; 

     LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(LAYOUT_INFLATER_SERVICE); 
     View layout = inflater.inflate(R.layout.data_dialog, 
       (ViewGroup) findViewById(R.id.AbsoluteLayout01)); 

     builder = new AlertDialog.Builder(mContext); 
     builder.setView(layout); 
     alertDialog = builder.create(); 
     alertDialog.show(); 

     final EditText txtUsername = (EditText) layout.findViewById(R.id.txtUsername); 

     final AlertDialog thisDialog = alertDialog; 

     Button btnSave = (Button) layout.findViewById(R.id.btnSave); 
     btnSave.setOnClickListener(new View.OnClickListener() { 
      public void onClick(View v) { 

       String strtxtUsername = txtUsername.getText().toString(); 

       //do something... 

      } 
     });     

Để đóng hộp thoại, gọi thisDialog.dismiss();

Phong cách trông giống như Theme.Light.NoTitleBar thường xuyên với một ListView với một biểu tượng và một Tiêu đề văn bản.

Hy vọng điều đó sẽ hữu ích!

+0

Vấn đề là cách gọi nó khi một tiện ích được nhấn. Nó phải ở bên trong một hoạt động ... và một hoạt động phải luôn luôn hiển thị một cái gì đó đúng không? – Matroska

+0

Ồ, xin lỗi, tôi đã hiểu lầm bạn rồi. Hãy thử đặt chủ đề của hoạt động để 'android: theme = "@ android: phong cách/Theme.Translucent.NoTitleBar" ' – Nick

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