Android中的弹窗之PopupWindow的实现

今天我们来了解一下Android中的弹窗之PopupWindow的使用:

如下图:当我们要点击右上角的菜单时弹出的弹窗:实现这个效果我们分三步:

1:首先新建一个弹窗的XML文件X.xml代码如下(R.layout.pop_diary_detail):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#99444444"
    android:fitsSystemWindows="true"
    android:gravity="center|bottom"
    android:orientation="vertical">

    <android.support.v7.widget.CardView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:cardCornerRadius="13dp"
        app:cardElevation="0dp">

        <LinearLayout
            android:layout_width="340dp"
            android:layout_height="wrap_content"
            android:background="@color/white"
            android:gravity="center"
            android:orientation="vertical">

            <!--如果不加这层布局那么就会报错-->
            <LinearLayout
                android:id="@+id/public_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <TextView
                    android:id="@+id/diary_change"
                    android:layout_width="match_parent"
                    android:layout_height="57dp"
                    android:gravity="center"
                    android:text="修改"
                    android:textColor="@color/takePhoto"
                    android:textSize="20sp" />

                <View
                    android:layout_width="match_parent"
                    android:layout_height="1dp"
                    android:background="@color/viewGrays" />
            </LinearLayout>

            <LinearLayout
                android:id="@+id/secret_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <TextView
                    android:id="@+id/diary_delete"
                    android:layout_width="match_parent"
                    android:layout_height="57dp"
                    android:gravity="center"
                    android:text="删除"
                    android:textColor="@color/takePhoto"
                    android:textSize="20sp" />
            </LinearLayout>

        </LinearLayout>

    </android.support.v7.widget.CardView>

    <android.support.v7.widget.CardView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginTop="10dp"
        app:cardCornerRadius="13dp"
        app:cardElevation="0dp">

        <LinearLayout
            android:id="@+id/diary_detail_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/diary_cancel"
                android:layout_width="340dp"
                android:layout_height="57dp"
                android:gravity="center"
                android:text="取消"
                android:textColor="@color/takePhoto"
                android:textSize="20sp" />
        </LinearLayout>
    </android.support.v7.widget.CardView>
</LinearLayout>:

2:在我们需要的界面(或者Fragment中)添加如下代码:

   (1)首先定义:

//弹窗设置
View popUp;
private PopupWindow popupWindow;

  (2)然后定义我们的弹窗的点击事件(假设有个控件供我们点击):

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.diary_detail_more:
            initPopUp();
            break;
        default:
            break;
    }
}

3:在我们的主类中或者(Fragment中)写如下代码:

/**
 * 从这里开始加载弹框的
 */

private void initPopUp() {
//初始化弹窗
    initAd();
//显示弹窗
    showPopUp();
}

/**
 * --------------弹窗显示-----------------
 */
private void showPopUp() {
    if (popupWindow.isShowing()) {
        popupWindow.dismiss();
    }
//弹窗显示的位置
    popupWindow.showAtLocation(popUp, Gravity.BOTTOM, 0, 0);
}

//初始化弹框
private void initAd() {
    //加载我们写好的布局
    popUp = getLayoutInflater().inflate(R.layout.pop_diary_detail, null);
    popupWindow = new PopupWindow(popUp, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, true);
    popupWindow.setTouchInterceptor(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
            return false;
        }
    });
    //初始化我们的事件
    initEvents();
}

private void initEvents() {
    //点击取消按钮则者弹窗消失
    popUp.findViewById(R.id.diary_detail_layout).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            popupWindow.dismiss();
        }
    });

    //显示一个吐司
    popUp.findViewById(R.id.diary_change).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(DiaryDetailActivity.this, "修改", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        }
    });
   //显示一个吐司
    popUp.findViewById(R.id.diary_delete).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(DiaryDetailActivity.this, "删除", Toast.LENGTH_SHORT).show();
            popupWindow.dismiss();
        }
    });

}

4:好了,大功告成!以后想用的时候就可以直接拿来用了!

猜你喜欢

转载自blog.csdn.net/qq_42618969/article/details/81135470
今日推荐