Android 實現頂層視窗、懸浮視窗
阿新 • • 發佈:2019-01-09
1、如圖片1所示,在一個Android應用中,除了標題欄和底層的ActionBar的區域,是我們可以操縱的UI區域,那是不是說我們就不能改變除了這兩個區域的UI呢?答案是否定的。
比如現在我們希望把一個View放在視窗的最低端顯示,通過hierarchyviewer工具我們可以發現最底層的ActionBar是在TestActivity佈局的父視窗中設定的,那麼我們想通過setContentView(R.layout.activity_main)在activity_main佈局檔案中設定就無法實現了,通過hierarchyviewer發現TestActivity佈局的root是一個id為content的FrameLayout,那麼可以通過下面兩種方法來實現:
2、
private void testLayout(){
View content = findViewById(android.R.id.content);
ViewGroup parent = (ViewGroup)content.getParent().getParent();
getLayoutInflater().inflate(R.layout.add_view, parent);
mCloseBarContainer = (LinearLayout) parent.findViewById(R.id.close_bar_container1);
}
3、
private void testWindow(){ WindowManager mWm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); View l= getLayoutInflater().inflate(R.layout.add_view, null); WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); mParams.width=WindowManager.LayoutParams.MATCH_PARENT; mParams.height=200; mParams.gravity=Gravity.BOTTOM; mWm.addView(l, mParams); mCloseBarContainer = (LinearLayout) l.findViewById(R.id.close_bar_container1); }
通過WindowManager來實現,如果要實現當TestActivity退出時仍然顯示這個View的懸浮窗效果的話,只需要在一個後臺的Service中來新增View就可以了
4、add_view.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/close_bar_container1" android:layout_width="fill_parent" android:layout_height="88dip" android:layout_weight="0" android:layout_gravity="bottom" android:clickable="false" android:gravity="center" android:background="#80ff0000"> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/close_bar" android:clickable="false" android:gravity="center" android:orientation="horizontal" > <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="center" android:src="@drawable/ic_launcher" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="14.4sp" android:textStyle="bold" android:textColor="#ffffff" android:text="This is Test!" /> </LinearLayout> </LinearLayout>
5、