编程语言
首页 > 编程语言> > 在Android 2.3.3或4.2上以编程方式设置时,半透明主题不起作用

在Android 2.3.3或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);
 }
}

布局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,我得到黑色背景而不是透明.可能有什么不对?

附:我不想使用manifest来声明活动的主题.

解决方法:

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

> https://code.google.com/p/android/issues/detail?id=4394
> https://code.google.com/p/android/issues/detail?id=3793
> https://groups.google.com/forum/?fromgroups=#!topic/android-developers/vSZHsVWUCqk
> Why getApplicationContext().setTheme() in a Activity does not work?

这个讨论的典型特征是setTheme在清单中设置主题时效果不佳(甚至Dianne Hackborn建议使用清单方式而不是setTheme()方式,请参见上面的第三个链接).
在定义背景时尤其如此.
遗憾的是,您在模拟器或图形布局编辑器中获得的结果无法传输到现实世界(说实际设备).因此,您在4.0.3仿真器中看到的内容在真实设备上可能并不相同(正如您已经注意到的那样;-).

如果没有特别的理由使用setTheme来主题你的Activity那么我建议你改变你的清单:

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

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

标签:android,transparency,android-activity
来源: https://codeday.me/bug/20191006/1862685.html