2012-01-05 4 views
8

Tôi đang làm việc trên ứng dụng Android đầu tiên của mình và đang cố gắng tạo kiểu cho hoạt động của mình. Cuối cùng, tôi muốn cho hoạt động của tôi trông giống như một hộp thoại. Tôi đã đưa ra tất cả các hoạt động của tôi Theme.Dialog phong cách sử dụng đoạn mã sau vào AndroidManifest.xml tôi:Tôi làm cách nào để hiển thị hoạt động của mình dưới dạng hộp thoại trong Android?

<application 
    android:icon="@drawable/group" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.Dialog"> 
</application> 

Điều này cho phép các hoạt động của tôi "nổi" xuất hiện và biên giới của một hộp thoại, nhưng không phải là tiêu đề theo kiểu. Tiêu đề chỉ có cùng màu và hình thức giống như nền hộp thoại chung, không phải là nền "tiêu đề" và đường viền như trong hộp thoại "thực". Chú ý làm thế nào trong cả hai ví dụ tiêu đề có một biên giới tốt đẹp dưới nó và trong một thứ hai, nó có một nền gradient.

Có cách nào để đảm bảo tiêu đề trên hoạt động của tôi bằng cách nào đó kế thừa tiêu đề hộp thoại hệ thống sao chép hiệu quả giao diện của hộp thoại cho hoạt động của tôi - ngoài đường viền và "phao" đi kèm với Theme.Dialog Phong cách?

Lưu ý rằng tôi không muốn gọi hoạt động của tôi như một hộp thoại từ khác, tôi chỉ muốn nó NHÌN như một dilaog, ngay cả khi nó được nạp để đáp ứng với một ý định theo intent- manifest của tôi bộ lọc.

Dialog Example 1

Dialog Example 2

ADD: Có lẽ một số cách tôi có thể có hoạt động của tôi, khi nó quay lên trong onCreate(), gọi một số phương pháp để biến mình thành một hộp thoại thực tế? Hãy nhớ rằng hoạt động vẫn cần phải có khả năng đáp ứng các ý định từ hệ thống.

+0

bạn muốn hộp thoại nào? đầu tiên hoặc thứ hai trong hình ảnh. – Sujit

+0

Cả hai đều là kết quả của việc gọi các phương thức hiển thị chuẩn cho hộp thoại.Thứ hai là hộp thoại xuất hiện theo chủ đề với giao diện người dùng TouchWiz của Samsung, đầu tiên là nó xuất hiện theo chủ đề của da tôi đang chạy trong CyanogenMod. Về cơ bản, tôi chỉ muốn hoạt động của tôi để APPEAR AS NẾU nó là một hộp thoại theo chủ đề bất cứ điều gì thiết bị của người dùng đang chạy, giống như nếu tôi sử dụng AlertDialog.Builder. – eidylon

Trả lời

2

Sau khi quyết định nhìn vào tôi muốn làm , thay vì cách thực hiện nó cụ thể, tôi đã tìm thấy một cách tiếp cận khác. Tôi reasked câu hỏi của tôi tìm kiếm ý tưởng tiếp cận thay vì ý tưởng thực hiện here. GalDude33 đã giúp tôi tìm ra cách để đạt được những gì tôi muốn. Câu trả lời của ông là câu trả lời cho câu hỏi này:

+0

Chắc chắn, nhưng vấn đề với cách tiếp cận này là, kết quả không có thuộc tính của Hoạt động. Ví dụ. bạn không thể hiển thị ActionBar trong hộp thoại của mình. –

+0

Tôi sẽ thực sự thừa nhận rằng không mang lại khả năng sử dụng ActionBar là bất lợi lớn nhất ... và phải cuộn thanh công cụ trông giống như của riêng tôi. Nếu bạn có thể chỉ cho tôi một cách để có được chức năng thoại trong khi cũng có thể sử dụng ActionBar, tôi sẽ rất hạnh phúc! – eidylon

+0

Tôi phát hiện ra rằng bạn có thể thay đổi kích thước của hoạt động trong phương thức onCreate (...), tuy nhiên tôi không biết cách tạo viền đen nửa trong suốt, để nó trông giống như hộp thoại: 'WindowManager.LayoutParams params = getWindow(). getAttributes(); params.height = 300; params.width = 100; getWindow(). SetGravity (Gravity.CENTER); getWindow(). SetAttributes (params); ' –

2

Bạn có thể làm như sau ..

tạo bố cục cho hộp thoại của bạn và đặt như sau.

Dialog mDialog = new Dialog(MainScreen.this,android.R.style.Theme_Translucent_NoTitleBar); 

mDialog .requestWindowFeature(Window.FEATURE_NO_TITLE); 

mDialog .setContentView(R.layout.dialoglayout); 
mDialog .show(); 
+0

Tôi cần phải thêm mã này vào mã trong một hoạt động khác, phải không? Hoạt động của tôi phản hồi trực tiếp ý định của trình khởi chạy (các lối tắt được tạo trên màn hình chính) và tôi muốn nó trông giống như một hộp thoại khi nó được hệ thống gọi cho những ý định đó hoặc trực tiếp thông qua trình khởi chạy. – eidylon

4

Một Dialog chủ đề có thể được tùy chỉnh bằng cách xác định nó như là phụ huynh, trong styles.xml

<resources> 
<style name="MyDialogTheme" parent="android:Theme.Dialog"> 
      <item name="android:background">#ffdddddd</item> 
</style> 
</resources> 

Nếu bạn đưa ra một màu sắc khác nhau để nền của kiểu hộp thoại tùy biến và cách bố trí (thêm android:background="#ffffffff" dưới tiêu đề bố trí trong tệp main.xml của bạn), nó sẽ cung cấp hộp thoại hệ thống giống như giao diện.

Hope this helps ..

nhỡ kể đến: Tham khảo các chủ đề tùy chỉnh trong biểu hiện của bạn như sau:

android:theme="@style/MyDialogTheme" 
+0

Vâng, tôi đã sử dụng phong cách 'Theme.Dialog' trên hoạt động của mình, nhưng nó chỉ cho bạn hình dạng nổi, và đường viền xung quanh hoạt động của bạn. Nó không phong cách thanh tiêu đề của hoạt động. Tôi không nhất thiết muốn tùy chỉnh giao diện của hộp thoại, tôi cố gắng làm cho hoạt động của tôi trông giống hệt như hộp thoại nội tại (tuy nhiên có thể trông giống như chủ đề của điện thoại người dùng). – eidylon