按照本教程http://cases.azoft.com/android-tutorial-floating-activity/
后,我能够创建一个浮动活动但是,为此,我必须在styles.xml
中添加此行:
<item name="android:windowIsTranslucent">true</item>
仅使用Android / Java代码可以产生相同的效果吗? (例如在Activity.onAttachedToWindow()
左右......)
提前感谢您的帮助。
[编辑01] styles.xml
一定不能改变(我不应该知道它里面有什么......)。但出于测试目的,我使用的是默认值:
<resources>
<style name="AppBaseTheme" parent="Theme.AppCompat.Light">
</style>
<style name="AppTheme" parent="AppBaseTheme">
</style>
</resources>
[编辑02] Resources.Theme.applyStyle() 似乎按我的意愿行事(根据API说明:“将新属性值放入主题”)。
所以我创建了以下custom_style.xml
:
<resources>
<style name="MyCustomStyle" >
<item name="android:windowIsTranslucent">true</item>
</style>
</resources>
然后,在onAttachedToWindow()
中,我打电话给:
getTheme().applyStyle(R.style.MyCustomStyle, true);
但它没有任何影响......
答案 0 :(得分:5)
仅使用Android / Java代码可以产生相同的效果吗?
我很害怕,不,你必须只在styles.xml
进行。单独android:windowIsTranslucent
的AFAIK值无法以编程方式更改。
当我们调用super.onCreate(savedInstanceState);
时,Activity类提供了一个空的图形窗口,我们在其上设置内容ie.views。并且将一个主题应用于此窗口,然后在此视图上加载内容。
因此序列将是,
super.onCreate()
例如
<强> styles.xml 强>
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:windowBackground">@drawable/background</item>
<item name="android:windowNoTitle">true</item>
</style>
<!-- Application theme.without title bar -->
<style name="AppTheme.NoTitleBar" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
<item name="android:windowBackground">@drawable/background</item>
<item name="android:windowNoTitle">true</item>
</style>
<!--Floating activity theme -->
<style name="Theme_Translucent" parent="android:style/Theme.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowFrame">@null</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">true</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowFullscreen">true</item>
</style>
然后按如下方式设置Floating activity
的主题:
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setTheme(R.style.Theme_Translucent); // Set here
setContentView(...)
}
答案 1 :(得分:1)
不能说以编程方式执行此操作..但如果您需要这样做,您可以尝试这样做..
在清单文件中为您添加主题,如此..
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
示例: -
<activity
android:name="com.example.androidhackerphonelocker.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
希望它能解决你的一些问题..
答案 2 :(得分:1)
这样做
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window w = getWindow(); // in Activity's onCreate() for instance
w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
答案 3 :(得分:0)
也许这会有所帮助。
@Override
protected void onCreate(Bundle savedInstanceState) {
processSetTheme(this);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
getWindow().setBackgroundDrawableResource(R.color.realTranslucent);
if (Build.VERSION.SDK_INT>=19){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
super.onCreate(savedInstanceState);
<color name="realTranslucent">#00000000</color>
答案 4 :(得分:0)
Android R 中出现了 a new method