Popupwindow 的簡單實用,(顯示在控件下方)


第一步:

private PopupWindow mPopupWindow;

第二步:寫一個popupwindow的布局文件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">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#669E9E9E">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#E4E4E4"
>
<TextView
android:id="@+id/popupwindow_Jan"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="一月份"
android:gravity="center"
/>
<TextView
android:id="@+id/popupwindow_Feb"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="二月份"
android:gravity="center"
/>
<TextView
android:id="@+id/popupwindow_Mar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="三月份"
android:gravity="center"
/>
</LinearLayout>
</RelativeLayout>
</LinearLayout>
第三步:在Activity寫代碼
public void onClick(View v) {
switch (v.getId()) {
case R.id.home_travel_modes_yuefen_textview:
showPopupWindow(v);
break;
case R.id.popupwindow_Jan:
showToastMsg("一月份");
break;
case R.id.popupwindow_Feb:
showToastMsg("二月份");
break;
default:
break;
}
 public void showPopupWindow(View v){
View contentView = LayoutInflater.from(HomeTravelModesActivity.this).inflate(R.layout.home_popuplayout, null);
TextView JanText = (TextView)contentView.findViewById(R.id.popupwindow_Jan);
TextView FebText = (TextView)contentView.findViewById(R.id.popupwindow_Feb);
TextView MarText = (TextView)contentView.findViewById(R.id.popupwindow_Mar);
JanText.setOnClickListener(this);
FebText.setOnClickListener(this);
MarText.setOnClickListener(this);
final PopupWindow popupWindow = new PopupWindow(contentView,
LinearLayout.LayoutParams.MATCH_PARENT, 300, true);
popupWindow.setTouchable(true);

// popupWindow.setTouchInterceptor(new View.OnTouchListener() {
//
// @Override
// public boolean onTouch(View v, MotionEvent event) {
//
// Log.i("mengdd", "onTouch : ");
//
// return false;
// // 這里如果返回true的話,touch事件將被攔截
// // 攔截后 PopupWindow的onTouchEvent不被調用,這樣點擊外部區域無法dismiss
// }
// });
// 如果不設置PopupWindow的背景,無論是點擊外部區域還是Back鍵都無法dismiss彈框
// 我覺得這里是API的一個bug
popupWindow.setBackgroundDrawable(getResources().getDrawable(
R.mipmap.ic_launcher));
// 設置好參數之后再show
popupWindow.showAsDropDown(v);
}

注:
若在Activity的onCreate()方法中直接寫彈出PopupWindow()方法報錯,因為Activity沒有完全啟動是不能彈出PopupWindow的,那我們只需要在Activity完全啟動后在彈出PopupWindow就行了。
重寫一下onWindowFocusChanged()方法:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
//彈出PopupWindow的具體代碼
}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM