5

Các Android Developer documentation mô tả làm thế nào để thiết lập một chủ đề Dialog cho một Activity:Làm thế nào để hiển thị một ActionBarCompat Activity như một hộp thoại thiết lập chủ đề của nó trong AndroidManifest.xml?

Mẹo: Nếu bạn muốn có một hộp thoại tùy chỉnh, bạn có thể thay vì hiển thị một Activity như một hộp thoại thay vì sử dụng Dialog API. Đơn giản chỉ cần tạo ra một hoạt động và thiết lập chủ đề của nó để Theme.Holo.Dialog trong các yếu tố <activity> manifest:

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

Vậy là xong. Hoạt động hiện hiển thị trong cửa sổ hộp thoại thay vì toàn màn hình.

Tôi đang cố gắng thực hiện việc này cho một ứng dụng sử dụng ActionBarCompat. Tôi đã cố gắng chủ đề khác nhau như ...

android:theme="@android:style/Theme.Dialog" 
android:theme="@style/Theme.AppCompat.Base.CompactMenu.Dialog" 
android:theme="@style/Theme.AppCompat.CompactMenu.Dialog" 

Tuy nhiên không ai trong số họ có vẻ làm việc kể từ khi tôi kết thúc với thông báo lỗi tương tự:

java.lang.IllegalStateException: Bạn cần phải sử dụng chủ đề Theme.AppCompat (hoặc hậu duệ) với hoạt động này.

Trả lời

8

Chỉ cần nhấn cùng một vấn đề ngày khác chuyển đổi từ ActionBarSherlock 4.2.0 (trong đó có một chủ đề hộp thoại đặc biệt được xóa trong các phiên bản sau này, gây ra nó không có nhiều để làm với ActionBar thực sự ...).

Tôi lấy cảm hứng từ món quà ra, đã đưa ra một chủ đề cho các API cũ:

res\values\styles.xml 
<style name="AppTheme.Dialog" parent="android:Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFrame">@null</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowBackground">@drawable/dialog_full_holo_light</item> 
    <item name="android:maxWidth">600dp</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
</style> 

trong khi sử dụng theme thoại Holo thực sự cho các API sau:

res\values-v11\styles.xml 
<style name="AppTheme.Dialog" parent="android:Theme.Holo.Light.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowCloseOnTouchOutside">true</item> 
</style> 

Cuối cùng tôi đã phải sử dụng một Hoạt động đơn giản để tránh ngoại lệ bạn có, cộng với một hành động khác mà ActionBarView kiểm tra chiều rộng/chiều cao của nó.

Bạn có thể đọc bài viết trên blog của tôi, với một liên kết đến mã nguồn đầy đủ ở cuối: http://dandar3.blogspot.com/2013/12/actionbarcompat-dialog-activity.html

+0

@ drawable/dialog_full_holo_light không có sẵn cho SDK nhỏ hơn 11. Chúng ta có nên thêm nó vào dự án (trong đó để tìm nó sau đó?) hoặc xóa nó khỏi xml? – Giorgio

+1

@Giorgio, xem tài nguyên ở cuối blog của tôi, nó có một dự án nguồn đầy đủ trong Google Code cũng như liên kết tới tài nguyên Android - vâng, bạn cần phải thêm chúng vào dự án của mình và đây là liên kết - https: //github.com/android/platform_frameworks_base/tree/master/core/res/res –

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