三种方式展示透明界面


本文将介绍三种展示透明界面的方法:

第1种    通过展示透明的popwindow



这种方式适合逻辑处理较少的,比如选择一些东西

但是有以下缺点:

首先,如果里边有Editext  用的话会出现一个问题   因为一旦点击输入,软键盘会将popwindow中的view向上推 

    等到关闭的时候   你会发现刚才被=推上去的view并没有随着软键盘的隐藏向下移动 

   也就是说本来我这个界面在底部  输入完成后   界面就显示到了中间   我尝试找但是一直没找到办法
其次,还有一个问题(代码中动态添加时)  展示popwindow一般在点击事件中展示,

    因为popwindow创建需要view,这个view我只知道在点击事件中有  一般都是在点击事件中 

   但这种情况不在   我解析一个二维码   解析完成后显示一个结果

   那这个结果的显示并不在点击事件   也就缺少创建对象时构造方法中的那个view  那这种情况就不能用了

PopupWindow popupWindow = new PopupWindow(popupWindow_view,LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true);

下边先看popwindow的布局文件:

<span style="font-size:14px;"><?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="这是透明的popwindow"
            android:textSize="20dp"
            android:layout_marginTop="130dp" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_centerInParent="true"
            android:id="@+id/hide"
            android:text="隐藏透明popwindow"
            android:textSize="20dp" />
</RelativeLayout></span>
注意: popupwindow布局文件不用设置透明颜色

再看MainActivity中

<span style="font-size:14px;">// 显示 设置logo的popupWindow
	private void showPopWindow(View v) {
		popupWindow_view = initPopwindowView();
		popupWindow = new PopupWindow(popupWindow_view,
				LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, true);
		// popupWindow.setAnimationStyle(R.anim.slide_in_from_bottom);
		popupWindow.showAtLocation(v, Gravity.LEFT, 0, 0);
		popupWindow_view.setFocusable(true);
		popupWindow.setFocusable(true);
		popupWindow_view.setFocusableInTouchMode(true);

		// 设置透明度
		WindowManager.LayoutParams params = getWindow().getAttributes();
		params.alpha = 0.5f;
		getWindow().setAttributes(params);

		// 点击其他地方消失
		popupWindow_view.setOnTouchListener(new OnTouchListener() {
			@SuppressLint("ResourceAsColor")
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				closePopwindow();
				return false;
			}
		});

		// 点击返回键让 popupWindow消失
		popupWindow_view.setOnKeyListener(new OnKeyListener() {
			@Override
			public boolean onKey(View v, int keyCode, KeyEvent event) {
				if (keyCode == KeyEvent.KEYCODE_BACK) {
					closePopwindow();
					return true;
				}
				return false;
			}
		});

	}

	// 初始化popupWindow
	private View initPopwindowView() {
		View view = View.inflate(this, R.layout.popupwindow, null);
		Button hide = (Button) view.findViewById(R.id.hide);
		hide.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				closePopwindow();	
			}
		});
		return view;
	}

	// 隐藏popupWindow
	private void closePopwindow() {
		if (popupWindow != null && popupWindow.isShowing()) {
			popupWindow_view.setFocusable(false);
			popupWindow_view.setFocusableInTouchMode(false);
			popupWindow.setFocusable(false);

			popupWindow.dismiss();
			popupWindow = null;
			WindowManager.LayoutParams params = getWindow().getAttributes();
			params.alpha = 1f;
			getWindow().setAttributes(params);
		}
	}</span>
第2种       通过展示透明的activity


思路:   开启一个新的activity,在清单文件中将这个activity的风格改成透明的

1.现在style下添加一个style 


    <span style="font-size:14px;">   <style name="Theme.Translucent" parent="AppBaseTheme">
        <item name="android:windowBackground">@color/transparent</item>
        <item name="android:colorBackgroundCacheHint">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style></span>
2.刚才的style里边有一个颜色 下边在color下添加一个颜色


接着在清单文件中找到要打开的透明activity中添加activity的风格  
<span style="font-size:14px;"><activity
            android:name=".TransparentActivity"
            android:label="@string/title_activity_transparent"
            android:theme="@android:style/Theme.Translucent" >
        </activity>
</span>

 

3.我们在新的activity中添加一些控件

<span style="font-size:14px;"><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"
    android:background="#90000000"
    tools:context="${relativePackage}.${activityClass}" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:layout_marginTop="130dp"
        android:gravity="center"
        android:text="这是开启的透明Activity"
        android:textSize="20dp" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_centerInParent="true"
        android:onClick="close"
        android:text="关闭"
        android:textSize="20dp" />
</RelativeLayout></span>
4.这个时候开启这个透明的activity就可以出现如图透明的界面了


第3中种   通过view来显示透明界面

  思路   在相对布局的最下边写一个布局  但这个布局是透明的   布局中可以添加我们想要添加的东西,但是默认让它gone掉

            在我们想要开启的再让它visible

先说布局文件


<span style="font-size:14px;"><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="${relativePackage}.${activityClass}" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="30dp"
        android:gravity="center"
        android:text="这是普通Activity"
        android:textSize="20dp" />
    <Button
        android:layout_width="match_parent"
        android:layout_height="80dp"
        android:layout_centerInParent="true"
        android:onClick="show"
        android:text="显示透明view"
        android:textSize="20dp" />
    <RelativeLayout
        android:id="@+id/rl_tran"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#90000000"
        android:visibility="gone" >
        <TextView
            android:layout_width="match_parent"
            android:layout_height="30dp"
            android:gravity="center"
            android:text="这是透明的view"
            android:textSize="20dp"
            android:layout_marginTop="130dp" />
        <Button
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_centerInParent="true"
            android:onClick="hide"
            android:text="隐藏透明view"
            android:textSize="20dp" />
    </RelativeLayout>
</RelativeLayout></span>
     注意:里边的相对布局是透明的外边的相对布局不能透明

再说MainActivity中

<span style="font-size:14px;"> private RelativeLayout rl_tran;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		rl_tran = (RelativeLayout) findViewById(R.id.rl_tran);
	}

	// 点击后显示透明界面
	public void show(View view) {
		rl_tran.setVisibility(View.VISIBLE);
	}

	// 点击后隐藏透明界面
	public void hide(View view) {
		rl_tran.setVisibility(View.GONE);
	}</span>

点击这里下载通过透明的activity展示透明的界面源码  


点击这里下载通过透明的View展示透明的界面源码  





  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值