在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