7

我有两个活动:

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);
 }
}

布局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>

布局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 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>

当我单击 MainActivity 中的按钮时,它会启动具有透明背景的 TranslucentActivity。在平台 4.0.3 上的 android 模拟器中一切看起来都很好但在其他平台上,例如 2.3.3 或 4.2,我得到黑色背景而不是透明。有什么问题?

PS 我不想使用清单来声明活动的主题。

4

2 回答 2

11

关于 setTheme() 或者为什么 setTheme() 没有按预期工作有很多讨论:

该讨论的精髓在于 setTheme 在清单中设置主题时效果不佳(甚至 Dianne Hackborn 建议使用清单方式而不是 setTheme() 方式,请参见上面的第三个链接)。在定义背景时尤其如此。不幸的是,您在模拟器或图形布局编辑器中获得的结果无法转移到现实世界(说实际设备)。因此,您在 4.0.3 模拟器中看到的内容可能与真实设备上的不同(正如您已经注意到的 ;-)。

如果没有特定理由使用 setTheme 为您的 Activity 设置主题,那么我建议您像这样更改您的清单:

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

您仍然可以使用 setTheme 为布局的其他元素设置主题,但在创建透明或类似对话框的活动时,我还没有找到任何其他可行的解决方案。

于 2013-03-18T14:00:26.370 回答
-1
<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>
于 2013-06-24T15:29:02.683 回答