前言
写了那么多页面,和这么多Activity对着干。有一天要写一个透明Activity,竟然思考半天。。。说多了都是泪啊!!!
任务:可以新建透明的Activity
透明的Activity和普通的Activity没有太大的区别。没有什么神圣之处,扯远了吧!!!
上代码:新建Activity;TransparentActivity.class
public class TransparentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题头
setContentView(R.layout.activity_transparent);
}
}
目前是不是没有区别。
布局文件activity_transparent.xml
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.transparentactivity.TransparentActivity">
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="上面的" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="最下面" />
</RelativeLayout>
从布局文件可以看到有两个按钮。从另外一个页面跳转过来。
显示如下图所示
现在不是透明的啊!那我们就让他变透明。。
在styles.xml
中添加下面的代码:
<style name="dialog_activity" parent="@style/Theme.AppCompat.Light.Dialog">
<!-- 去黑边 -->
<item name="android:windowFrame">@null</item>
<!-- 设置是否可滑动 -->
<item name="android:windowIsFloating">true</item>
<!-- 设置是否透明 -->
<item name="android:windowIsTranslucent">false</item>
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景 -->
<item name="android:background">@null</item>
<!-- 窗口背景 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 是否变暗 -->
<item name="android:backgroundDimEnabled">true</item>
<!-- 点击空白部分activity不消失 -->
<item name="android:windowCloseOnTouchOutside">true</item>
<!-- 无标题 有的手机设置这行代码-->
<item name="windowNoTitle">true</item>
</style>
注意:
1.parent="android:style/Theme.Dialog"
与parent="@style/Theme.AppCompat.Light.Dialog"
根据自己的activity选择相应的parent。
2.无标题,也可以向上面一样,用代码实现。。
<!-- 无标题 -->
<item name="android:windowNoTitle">true</item>
<!-- 无标题 有的手机设置这行代码-->
<item name="windowNoTitle">true</item>
在AndroidManifest.xml
中注册TransparentActivity
代码如下:
<activity
android:name=".TransparentActivity"
android:theme="@style/dialog_activity"></activity>
运行一下得到下图:
截图二我只是想说这不科学。最下面的按钮上图是满屏的到了这一张图就是没有满屏。不用怀疑你的眼睛,就是没有满屏。
继续修改,现在我们去TransparentActivity.class
进行操作。
public class TransparentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题头
setContentView(R.layout.activity_transparent);
//窗口对齐屏幕宽度
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams layoutParams = win.getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.gravity = Gravity.BOTTOM;//设置对话框在底部显示
win.setAttributes(layoutParams);
}
}
运行一下得到下图:
截图三哎,好多了,基本满足需求了。但是有一个地方还是有点别扭,那就是最上面的状态栏。怎么是黑色的呢??继续在TransparentActivity.class
进行操作。
public class TransparentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题头
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.activity_transparent);
//窗口对齐屏幕宽度
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams layoutParams = win.getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.gravity = Gravity.BOTTOM;//设置对话框在底部显示
win.setAttributes(layoutParams);
}
}
运行一下得到下图:
截图四哎,还是别扭啊!上面的按钮被顶上去了。继续来。。在TransparentActivity.class
进行操作。
public class TransparentActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
supportRequestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题头
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//透明状态栏
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.activity_transparent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 设置根布局的参数
ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
rootView.setFitsSystemWindows(true);
rootView.setClipToPadding(true);
}
//窗口对齐屏幕宽度
Window win = this.getWindow();
win.getDecorView().setPadding(0, 0, 0, 0);
WindowManager.LayoutParams layoutParams = win.getAttributes();
layoutParams.width = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.height = WindowManager.LayoutParams.MATCH_PARENT;
layoutParams.gravity = Gravity.BOTTOM;//设置对话框在底部显示
win.setAttributes(layoutParams);
}
}
运行一下得到下图:
截图五满足需求完工。透明Activity的背景,布局都是很灵活的。。。
网友评论