2010-04-22 64 views
6

Trường hợp sử dụng của tôi đang viết hoạt động của trình điều khiển lớp phủ cho bản xem trước máy ảnh ngang. Tôi đã làm theo hướng dẫn từ một vài hướng dẫn để viết một chủ đề trong suốt.Hoạt động phải trong suốt, nhưng có nền màu đen

Vì vậy res/values ​​của tôi/style.xml trông như thế này:

<resources> 

    <style name="Theme" parent="android:Theme" /> 

    <style name="Theme.Transparent"> 
     <item name="android:windowBackground">@drawable/transparent_background</item> 
    </style> 

    <drawable name="transparent_background">#00000000</drawable> 

</resources> 

Đoạn hoạt động:

<activity android:name=".CameraPreview" 
     android:label="Camera" 
     android:screenOrientation="landscape" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity android:name=".Controlls" 
       android:label="Controlls" 
       android:screenOrientation="portrait" 
       android:theme="@android:style/Theme.Translucent"> 
    </activity> 

Khi tôi bắt đầu hoạt động này từ hoạt động gốc của tôi, bố trí được rút ra một cách chính xác , nhưng nền vẫn màu đen. Tôi đã cố gắng sử dụng @android:style/Theme.Translucent để thay thế, nhưng Chủ đề này kế thừa định hướng từ hoạt động gọi điện (phong cảnh) và đó không phải là điều tôi muốn.

Edit:

Việc áp dụng giữ bản xem trước camera được thiết lập để xem phong cảnh vì nó không hiển thị xem trước một cách chính xác theo hướng dọc. (xem old google bug report)

Điều tôi muốn làm là đặt hoạt động độc lập cho giao diện tương tác người dùng ở phía trước mặt giữ máy ảnh (hoạt động này phải được đặt thành 'chân dung' hoặc thậm chí tốt hơn để 'cảm biến')

Trả lời

2

Hãy thử cài sẵn @android:style/Theme.Translucent thay vì tùy chỉnh của bạn, theo this blog post. Tôi đã không cố gắng làm điều này bản thân mình, vì vậy tôi không biết nếu kỹ thuật viết về có hoạt động hay không.

+0

@android của nó: phong cách/Theme.Translucent là minh bạch, nhưng sửa lại chế độ xem theo hướng của hoạt động cơ bản (xem trước máy ảnh xem phong cảnh của tôi). Chế độ xem này phải là hình chân dung. –

+0

Điều đó không liên quan gì đến nền của bạn. Nếu bạn không muốn hoạt động của mình thay đổi hướng, điều đó được xử lý theo các cách khác, chẳng hạn như 'android: screenOrientation =" portrait "' trong tệp kê khai của bạn. – CommonsWare

+0

Xin lỗi, tôi đã không đề cập đến nó, nhưng đó là chính xác những gì tôi đã làm. (Tôi sẽ chỉnh sửa bài đăng với tệp kê khai của tôi). Cảm ơn lời khuyên của bạn cho đến nay. –

1

Tôi phát hiện ra rằng, một yếu tố con quan trọng khác cho mô tả kiểu dáng ở trên là thiếu <item name="android:windowIsTranslucent">true</item>.

Vấn đề:

Đó phần tử con cũng gây ra đồng bộ hóa định hướng của hoạt động với gọi một. (cùng hiệu lực như @android:style/Theme.Translucent)

1

Tôi gặp phải vấn đề tương tự như bạn mô tả (liên quan đến nền mờ và hướng màn hình), nhưng cuối cùng tôi đã hòa giải với thực tế rằng đây chỉ là cách hoạt động. Trong thực tế nó thực sự có ý nghĩa rằng nó hoạt động theo cách này. Tôi không thể nghĩ ra bất kỳ hệ thống dựa trên màn hình nào hỗ trợ phối cảnh chân dung và phong cảnh, vậy tại sao nên sử dụng Android?

Tôi đoán quy tắc chung là tất cả hoạt động hiển thị phải có cùng hướng, bất kể thuộc tính nào trong tệp kê khai. Nếu tất cả được đặt thành "sensor" thì tất cả chúng sẽ thay đổi, nếu chúng được cố định thành dọc hoặc ngang, thì những thứ khác phải tuân theo (và bất kỳ ai đặt giá trị cuối cùng là "thắng").

Tôi đoán đây chỉ là quá rõ ràng để các nhà phát triển rằng nó đã không xảy ra đối với họ để ghi lại nó :)

0

Remove và tất cả thực hiện

@Override 
public void onAttachedToWindow() {} 
+4

vui lòng giải thích mã của bạn chi tiết hơn. –

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