1:先看运行效果:
2:直接上代码:MainActivity.java
package com.youpeng.popwindowdemo;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
public class MainActivity extends Activity implements OnClickListener {
private Button button;
private static final int FIRST = 1;
private static final int SECOND = 2;
private PopupWindow window;
private View view;
private Button btnSms, btnEmail, btnCall, btnChat;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 显示 popupWindow
window = CreatePopupWindow(MainActivity.this);
// PopupWindow popupWindow = makePopupWindow(MainActivity.this);
int[] xy = new int[2];
button.getLocationOnScreen(xy);
window.showAtLocation(button, Gravity.RIGHT | Gravity.TOP,
-xy[0] / 2, xy[1] + button.getWidth());
// popupWindow.showAsDropDown(button,0, 0);
}
});
}
// 创建一个包含自定义view的PopupWindow,通过xml布局
private PopupWindow CreatePopupWindow(MainActivity mainActivity) {
view = this.getLayoutInflater().inflate(R.layout.dialog2, null);
window = new PopupWindow(view, ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
btnSms = (Button) view.findViewById(R.id.btnSms);
btnSms.setOnClickListener(this);
btnSms.setBackgroundResource(R.drawable.sms_selector);
btnCall = (Button) view.findViewById(R.id.btnCall);
btnCall.setOnClickListener(this);
btnCall.setBackgroundResource(R.drawable.call_selector);
btnChat = (Button) view.findViewById(R.id.btnChat);
btnChat.setOnClickListener(this);
btnChat.setBackgroundResource(R.drawable.chat_selector);
btnEmail = (Button) view.findViewById(R.id.btnEmail);
btnEmail.setOnClickListener(this);
btnEmail.setBackgroundResource(R.drawable.email_selector);
// 设置PopupWindow外部区域是否可触摸
window.setFocusable(true); // 设置PopupWindow可获得焦点
window.setTouchable(true); // 设置PopupWindow可触摸
window.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismissWindow();
}
});
return window;
}
// 创建一个包含自定义view的PopupWindow,通过代码布局
private PopupWindow makePopupWindow(Context cx) {
window = new PopupWindow(cx);
Button b1 = new Button(this);
b1.setText("first");
b1.setId(FIRST);
b1.setOnClickListener(this);
b1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
Button b2 = new Button(this);
b2.setText("Second");
b2.setId(SECOND);
b2.setOnClickListener(this);
b2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT));
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.addView(b1);
linearLayout.addView(b2);
linearLayout.setOrientation(LinearLayout.VERTICAL);
window.setContentView(linearLayout);
window.setBackgroundDrawable(getResources().getDrawable(
R.drawable.popwindow_bg));
window.setWidth(DisplayManager.dipToPixel(getApplicationContext(), 150));
window.setHeight(DisplayManager
.dipToPixel(getApplicationContext(), 150));
// 设置PopupWindow外部区域是否可触摸
window.setFocusable(true); // 设置PopupWindow可获得焦点
window.setTouchable(true); // 设置PopupWindow可触摸
window.setOutsideTouchable(true); // 设置非PopupWindow区域可触摸
return window;
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnSms:
Intent intentSms = new Intent(this, SmsActivity.class);
startActivity(intentSms);
dismissWindow();
break;
case R.id.btnCall:
Intent intentCall = new Intent(this, CallActivity.class);
startActivity(intentCall);
dismissWindow();
break;
case R.id.btnChat:
Intent intentChat = new Intent(this, ChatActivity.class);
startActivity(intentChat);
dismissWindow();
break;
case R.id.btnEmail:
Intent intentEmail = new Intent(this, EmailActivity.class);
startActivity(intentEmail);
dismissWindow();
break;
default:
dismissWindow();
break;
}
}
private void dismissWindow() {
if (window.isShowing())
window.dismiss();
}
}
3:main.xml
<linearlayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:orientation="horizontal">
<textview android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_weight="1" android:text="Title">
<button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="click">
</button></textview></linearlayout>
</linearlayout>
4:dialog2.xml
<linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal">
<button android:id="@+id/btnSms" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:background="@drawable/sms_icon">
</button><button android:id="@+id/btnEmail" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:background="@drawable/email_icon">
</button></linearlayout>
<linearlayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal">
<button android:id="@+id/btnCall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:background="@drawable/call_icon">
</button><button android:id="@+id/btnChat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dip" android:background="@drawable/chat_icon">
</button></linearlayout>
</linearlayout>
5:几个button背景选择器的xml
5.1:call_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/call_icon_press">
<item android:state_focused="true" android:drawable="@drawable/call_icon_press">
<item android:state_pressed="true" android:drawable="@drawable/call_icon_press">
<item android:drawable="@drawable/call_icon">
</item></item></item></item></selector>
5.2:chat_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/chat_icon_press">
<item android:state_focused="true" android:drawable="@drawable/chat_icon_press">
<item android:state_pressed="true" android:drawable="@drawable/chat_icon_press">
<item android:drawable="@drawable/chat_icon">
</item></item></item></item></selector>
5.3:email_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/email_icon_press">
<item android:state_focused="true" android:drawable="@drawable/email_icon_press">
<item android:state_pressed="true" android:drawable="@drawable/email_icon_press">
<item android:drawable="@drawable/email_icon">
</item></item></item></item></selector>
5.4:sms_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@drawable/sms_icon_press">
<item android:state_focused="true" android:drawable="@drawable/sms_icon_press">
<item android:state_pressed="true" android:drawable="@drawable/sms_icon_press">
<item android:drawable="@drawable/sms_icon">
</item></item></item></item></selector>
6:资源图片