2013-05-26 42 views
7

Làm cách nào để hiển thị Hoạt động dưới dạng cửa sổ lớp phủ trên máy tính bảng? Một ví dụ của việc này là ứng dụng Google+ mới như đã thấy ở đây:Hiển thị Hoạt động dưới dạng cửa sổ lớp phủ trên máy tính bảng

enter image description here

Điều quan trọng là tôi muốn ActionBar trở thành một phần của cửa sổ và cho Hoạt động bên dưới để được mờ đi như đã thấy trong ảnh chụp màn hình.

Cảm ơn

Trả lời

10

Bạn chỉ có thể sử dụng theme thoại. Để làm điều này, chỉ cần viết trong Manifest:

android:theme="@android:style/Theme.Dialog" 

hoặc

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

hoặc chỉ bằng cách tạo ra chủ đề của riêng bạn trong styles.xml:

<style name="MyDialogTheme" parent="Theme.Holo.Dialog"> 
... 
</style> 

Bạn có thể đặt chủ đề như vậy cho xlarge hoặc màn hình lớn bằng cách tạo styles.xml trong các thư mục values-xlarge hoặc values-large.

Nếu bạn muốn thiết lập kiến ​​trúc này chỉ cho máy tính bảng, sau đó bạn có thể thay đổi theme động bằng cách kiểm tra các kích thước màn hình như thế này:

if (Configuration.SCREENLAYOUT_SIZE_XLARGE) 
{ 
//setTheme(yourDialogTheme); 
} 

Vui lòng kiểm tra câu trả lời này nếu bạn muốn đối thoại với thanh hành động. Bạn có thể làm điều này bằng cách tạo hộp thoại tùy chỉnh của bạn.

Dialog themed activity with action bar

Custom dialog

EDIT: Một câu trả lời từ google group post.Hãy thử điều này trong xml của bạn với phong cách:

<style name="PopupTheme" parent="android:Theme.Holo.Light.Dialog"> 
     <item name="android:windowIsFloating">false</item> 
     <item name="android:windowContentOverlay">@null</item> 
     <item name="android:windowSoftInputMode">stateAlwaysHidden</item> 
     <item name="android:windowActionModeOverlay">true</item> 
     <item name="android:windowIsTranslucent">true</item> 
    </style> 

Trong mã Java

public static void showAsPopup(Activity activity) { 
     //To show activity as dialog and dim the background, you need to declare android:theme="@style/PopupTheme" on for the chosen activity on the manifest 
     activity.requestWindowFeature(Window.FEATURE_ACTION_BAR); 
     activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND, 
       WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
     LayoutParams params = activity.getWindow().getAttributes(); 
     params.height = LayoutParams.FILL_PARENT; 
     params.width = 850; //fixed width 
     params.alpha = 1.0f; 
     params.dimAmount = 0.5f; 
     activity.getWindow().setAttributes((android.view.WindowManager.LayoutParams) params); 
    } 
1

Bạn nên sử dụng Theme.Dialog trong bạn Manifest.xml cho Hoạt động

android:theme="@android:style/Theme.Dialog" 

cho tương lai sử dụng bạn nên sử dụng một CustomTheme ở bạn những giá trị/giá trị-11/giá trị-14->styles.xml (EDIT)

EDIT:

  <activity 
      android:name="com.apps.ActivityP" 
      android:theme="@style/CustomTheme"/> 

tại bạn đánh giá cao styles.xml thư mục

<style name="CustomTheme" parent="android:Theme.Black"> 

ví dụ bạn giá trị-11/14 styles.xml thư mục

<style name="CustomTheme" parent="android:Theme.Holo.Dialog"> 
+0

Tôi đã cố gắng này và nó không có tác dụng trên Nexus của tôi 10 My Manifest: Styles.xml Milo

+0

Ngoài ra, bạn nên kiểm tra [link] này (http) : //developer.android.com/guide/topics/ui/themes.html) – Oli

+0

Cảm ơn, android: Theme.Holo.Dialog đã thực hiện thủ thuật. Không chắc tại sao, có lẽ tôi đã ghi đè những phong cách khác ở đâu đó khác. Tuy nhiên, tôi dường như không thể sử dụng ActionBar bằng cách sử dụng Chủ đề đó. Tôi nhận được một cuộc gọi nullpointer: actionBar.setDisplayHomeAsUpEnabled (true); – Milo

0

Bạn cần đến mức độ chủ đề hoạt động của bạn với

Theme.AppCompat.Light.DialogWhenLarge 

hoặc

Theme.Holo.DialogWhenLarge 

đây Là một ví dụ

<style name="AppTheme.DialogActivity" parent="Theme.AppCompat.Light.DialogWhenLarge"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorPrimary</item> 
    <!-- Your theme here --> 
</style> 
Các vấn đề liên quan