2013-03-16 25 views
6

Tôi có hai hoạt động:chủ đề mờ không hoạt động khi thiết lập trình trên Android 2.3.3 hoặc 4.2

public class MainActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
public void click(View view) { 
    Intent intent= new Intent(this, TranslucentActivity.class); 
    startActivity(intent);   
} 
} 

public class TranslucentActivity extends Activity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    this.setTheme(android.R.style.Theme_Translucent); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_translucent); 
} 
} 

Layout activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:android1="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" > 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:onClick="click" /> 
</RelativeLayout> 

Layout activity_translucent

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".TranslucentActivity" > 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:text="Hello_world" /> 
</RelativeLayout> 

Manifest

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.translucencytest" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <application 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.translucencytest.MainActivity" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 
       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity 
      android:name="com.example.translucencytest.TranslucentActivity"> 
     </activity> 
    </application> 
</manifest> 

Khi tôi nhấp vào nút trong MainActivity, nó bắt đầu TranslucentActivity với nền trong suốt. Tất cả đều tốt trong trình giả lập Android trên nền tảng 4.0.3 Nhưng trên các nền tảng khác, ví dụ: 2.3.3 hoặc 4.2, tôi có nền đen thay vì trong suốt. Điều gì có thể sai ?

P.S. Tôi không muốn sử dụng tệp kê khai để khai báo chủ đề cho các hoạt động.

+0

Tôi vừa thử nghiệm chủ đề và nó hoạt động như được thiết kế trên các phiên bản Android khác nhau. Có rất nhiều thứ có thể sai với ví dụ của bạn. Chủ đề mờ sẽ hiển thị cửa sổ phía sau, vì vậy nếu cửa sổ đó có màu đen thì bạn sẽ không thấy độ trong suốt. Khi bạn không khai báo một chủ đề cho ứng dụng của bạn thì nó sẽ không minh bạch vì Android sử dụng một chủ đề mặc định trước khi bạn gọi setTheme và sau đó bạn sẽ thấy chủ đề mặc định thay vì màn hình chủ của bạn. Để có thể giúp bạn ít nhất nên đăng hai cách sử dụng bố trí trong ví dụ và biểu hiện cũng như –

+0

@EmanuelMoecklin Tôi đã thêm bố cục và biểu hiện vào bài đăng của mình. Tôi nghi ngờ rằng chủ đề mặc định được hiển thị thay vì mờ, nhưng tại sao nó hoạt động trên 4.0.3 và không hoạt động trên 2.3.3 và 4.2? – Wytas

+0

Bạn đang sử dụng @ style/AppTheme của riêng mình để bạn cũng phải đăng bài đó để tôi có thể kiểm tra ví dụ của bạn. Các phiên bản Android khác nhau sử dụng các chủ đề, kiểu và tài nguyên khác nhau cho cùng một yếu tố màn hình (chế độ xem). Nhà sản xuất cũng chủ đề thiết bị của họ để phân biệt chúng với các thiết bị cạnh tranh. Trong khi ví dụ: nền mặc định trên một thiết bị có thể có màu đen, có thể hơi trong suốt và có độ dốc trên thiết bị khác. Bạn không thể thực sự dựa vào "những thứ" để trông giống nhau trên mọi thiết bị trừ khi bạn chủ đề chúng cho mình. –

Trả lời

10

Có rất nhiều cuộc thảo luận về setTheme() hay đúng hơn là lý do tại sao setTheme() không hoạt động như mong đợi:

Tinh túy cho cuộc thảo luận đó là setTheme không hoạt động tốt trong khi thiết lập chủ đề trong tệp kê khai (thậm chí Dianne Hackborn đề xuất sử dụng cách biểu hiện trên phương thức setTheme(), xem liên kết thứ ba ở trên). Điều này đặc biệt đúng khi xác định nền. Kết quả bạn nhận được trong trình mô phỏng hoặc trong trình soạn thảo bố cục đồ họa có thể không được chuyển sang thế giới thực (nói thiết bị thực tế). Vì vậy, những gì bạn thấy trong trình giả lập 4.0.3 của bạn có thể không giống nhau trên một thiết bị thực (như bạn đã nhận thấy ;-).

Nếu không có lý do cụ thể để sử dụng setTheme đến chủ đề hoạt động của bạn sau đó tôi muốn giới thiệu để thay đổi biểu hiện của bạn như thế này:

<activity android:name=".TranslucentActivity" 
      android:theme="@android:style/Theme.Translucent"/> 

Bạn vẫn có thể sử dụng setTheme đến chủ đề các yếu tố khác của cách bố trí của bạn nhưng tôi thiên đường 't tìm thấy bất kỳ giải pháp làm việc khác khi nói đến việc tạo ra các hoạt động như trong suốt hoặc hộp thoại.

+0

Hấp dẫn và kỳ quái. Tôi tìm thấy "đôi khi nó hoạt động, đôi khi nó không" nếu bạn đặt 'windowBackground' để minh bạch TRONG THE MANIFEST. Nếu bạn chỉ sử dụng '@android: style/Theme.Translucent' trong tệp kê khai - có vẻ như nó luôn hoạt động. – Fattie

0
<activity android:theme="@android:style/Theme.Translucent.NoTitleBar" 
android:name="com.example.translucencytest.MainActivity" > 
<intent-filter> 
<action android:name="android.intent.action.MAIN" /> 
<category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
</activity> 
<activity android:theme="@android:style/Theme.Translucent.NoTitleBar" 
android:name="com.example.translucencytest.TranslucentActivity"> 
</activity> 
+2

Trong câu hỏi của tôi, tôi đã nói rằng tôi không muốn sử dụng tệp kê khai – Wytas

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