应项目需求要实现一个无界面的Activity
各种网址试了一遍界面是没了,但是无法点击桌面上的图标,各种属性就只是透明而已!
要求:不仅仅透明、还要能点击下面的图标、不需要setContentView(R.layout.activity_main) !
其实很简单上代码了,下面是我Activity的主题style,主要是设置为透明
<style name="AppThemeTranslucent" parent="AppTheme.NoBar">
<item name="android:windowBackground">@color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Translucent</item>
</style>
看一下我Activity的代码,并没有写入布局,还有去除标题栏的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags( WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
}
此时运行起来确实没有界面了,但只是透明的虽然没有设置布局但还是不能点击到桌面上的图标,于是...
Window window = this.getWindow();
WindowManager m = window.getWindowManager();
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = window.getAttributes(); // 获取对话框当前的参数值
p.height = 0; // 高度设置为0
p.width = 0;//宽0
p.gravity = Gravity.CENTER;
window.setAttributes(p);
下面是全部代码,哈哈,我把布局大小设置为0了,这样就可以了,实现了真正的无界面!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_main);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags( WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE);
/*
* 将对话框的大小按屏幕大小的百分比设置
*/
Window window = this.getWindow();
WindowManager m = window.getWindowManager();
Display d = m.getDefaultDisplay(); // 获取屏幕宽、高用
WindowManager.LayoutParams p = window.getAttributes(); // 获取对话框当前的参数值
p.height = 0; // 高度设置为0
p.width = 0;//宽0
p.gravity = Gravity.CENTER;
window.setAttributes(p);