前言
寫了那么多頁面焚辅,和這么多Activity對著干映屋。有一天要寫一個透明Activity,竟然思考半天同蜻。棚点。。說多了都是淚巴迓L蔽觥!卵蛉!
任務:可以新建透明的Activity
透明的Activity和普通的Activity沒有太大的區(qū)別颁股。沒有什么神圣之處么库,扯遠了吧I邓俊!诉儒!
上代碼:新建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);
}
}
目前是不是沒有區(qū)別葡缰。
布局文件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>
從布局文件可以看到有兩個按鈕。從另外一個頁面跳轉(zhuǎn)過來忱反。
顯示如下圖所示
現(xiàn)在不是透明的胺菏汀!那我們就讓他變透明温算。怜校。
在styles.xml
中添加下面的代碼:
<style name="dialog_activity" parent="@style/Theme.AppCompat.Light.Dialog">
<!-- 去黑邊 -->
<item name="android:windowFrame">@null</item>
<!-- 設(shè)置是否可滑動 -->
<item name="android:windowIsFloating">true</item>
<!-- 設(shè)置是否透明 -->
<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>
<!-- 無標題 有的手機設(shè)置這行代碼-->
<item name="windowNoTitle">true</item>
</style>
注意:
1.parent="android:style/Theme.Dialog"
與parent="@style/Theme.AppCompat.Light.Dialog"
根據(jù)自己的activity選擇相應的parent。
2.無標題,也可以向上面一樣注竿,用代碼實現(xiàn)茄茁。。
<!-- 無標題 -->
<item name="android:windowNoTitle">true</item>
<!-- 無標題 有的手機設(shè)置這行代碼-->
<item name="windowNoTitle">true</item>
在AndroidManifest.xml
中注冊TransparentActivity
代碼如下:
<activity
android:name=".TransparentActivity"
android:theme="@style/dialog_activity"></activity>
運行一下得到下圖:
我只是想說這不科學巩割。最下面的按鈕上圖是滿屏的到了這一張圖就是沒有滿屏裙顽。不用懷疑你的眼睛,就是沒有滿屏宣谈。
繼續(xù)修改愈犹,現(xiàn)在我們?nèi)?code>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;//設(shè)置對話框在底部顯示
win.setAttributes(layoutParams);
}
}
運行一下得到下圖:
哎闻丑,好多了漩怎,基本滿足需求了。但是有一個地方還是有點別扭嗦嗡,那就是最上面的狀態(tài)欄勋锤。怎么是黑色的呢?酸钦?繼續(xù)在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) {
//透明狀態(tài)欄
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;//設(shè)置對話框在底部顯示
win.setAttributes(layoutParams);
}
}
運行一下得到下圖:
哎咱枉,還是別扭啊徒恋!上面的按鈕被頂上去了蚕断。繼續(xù)來。入挣。在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) {
//透明狀態(tài)欄
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
setContentView(R.layout.activity_transparent);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 設(shè)置根布局的參數(shù)
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;//設(shè)置對話框在底部顯示
win.setAttributes(layoutParams);
}
}
運行一下得到下圖:
滿足需求完工。透明Activity的背景径筏,布局都是很靈活的葛假。。滋恬。