PopupWindow提供了弹出框的功能。比如点击登录按钮弹出一个框,用于输入用户信息。是一个很常用的功能。
1. 布局文件
在 /res/layout/中创建popup.xml文件来定义弹出窗口的布局样式:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="#cccccc" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="1dp">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_margin="20dp">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="弹出框"/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"/>
<Button
android:id="@+id/dismiss"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="#ffffff"
android:text="取消"/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
2. 创建PopupWindow
首先,描述一下功能:
在activiry_main.xml文件创建一个按钮,点击弹出一个框:
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.popwindow.MainActivity" >
<Button
android:id="@+id/openpopup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="弹出框"
/>
</RelativeLayout>
在弹出框上一个按钮,点击之后弹出框消失。
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout.LayoutParams;
import android.widget.PopupWindow;
public class MainActivity extends ActionBarActivity {
private Button btnOpenPop = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnOpenPop = (Button)findViewById(R.id.openpopup);
btnOpenPop.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*
* 加载布局文件popup.xml
* */
LayoutInflater inflater = LayoutInflater.from(MainActivity.this);
View popupView = inflater.inflate(R.layout.popup, null);
/*
* 创建PopupWindow
*/
final PopupWindow windPopupWindow = new PopupWindow(
popupView,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT
);
/*
* 这里是获取popup.xml文件中按钮,
* 千万不要机械性的写成
* dismiss = (Button)findViewById(R.id.dismiss);
* 否则会报空指针异常
*/
Button dismiss = (Button)popupView.findViewById(R.id.dismiss);
dismiss.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
/*
* 点击取消按钮,弹出框消失
*/
windPopupWindow.dismiss();
}
});
/*
* 设置弹出框的位置,xy轴
*/
windPopupWindow.showAsDropDown(btnOpenPop, 50, -10);
}
});
}
}
Happy Coding!