zoukankan      html  css  js  c++  java
  • Android基础-弹窗对话框(popup)

    生成弹窗对话框主要分为4步 

    第一步:实例化弹窗对象 

     View v=LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
            //1.实例化对象
           //将整个布局变成View
            //参数1:用在弹窗中的View
            //参数2,3:弹窗的宽高
            //参数4(focusable): 能否获取焦点
     PopupWindow window = new PopupWindow(v, 600, 80, true);

    popup_layout.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="horizontal" android:layout_width="match_parent"
        android:layout_height="match_parent">
    
        <TextView
            android:id="@+id/choose"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:text="选择"
            android:textColor="#ffffff"
            android:gravity="center"
            android:background="#000000"/>
    
        <TextView
            android:id="@+id/choose_all"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:text="全选"
            android:textColor="#ffffff"
            android:gravity="center"
            android:background="#000000"/>
    
        <TextView
            android:id="@+id/copy"
            android:layout_width="60dp"
            android:layout_height="30dp"
            android:text="复制"
            android:textColor="#ffffff"
            android:gravity="center"
            android:background="#000000"/>
    
    </LinearLayout>

    第二步设置背景(动画)

    设置背景

           //设置背景
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //设置背景为透明色
            //设置能响应外部的点击事件
            window.setOutsideTouchable(true);
            //设置能响应点击事件
            window.setTouchable(true);

    设置动画

    //1.创建动画资源 2.创建一个style应用动画资源 3.对当前弹窗的动画风格设置为第二步的资源索引
     window.setAnimationStyle(R.style.translate_anim);

    设置动画中需要先设置anim动画的出现方式,这里使用的是移动方式

    translate.xml 

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:fromXDelta="0"
            android:toXDelta="0"
            android:fromYDelta="800"
            android:toYDelta="0"
            android:duration="10000">
        </translate>
    </set>

    style里面设置样式

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <style name="mydialog" parent="android:style/Theme.Dialog">
            <item name="android:windowNoTitle">true</item>
            <item name="android:windowBackground">@android:color/transparent</item>
        </style>
        <style name="translate_anim">
            <item name="android:windowEnterAnimation">@anim/translate</item>
        </style>
    </resources>

    3.显示,显示主要是用来设置窗体的位置

     //3.显示
            //参数1(anchor):锚
            //参数2,3:相对于锚在x,y方向上的偏移量
            window.showAsDropDown(view, -600, 0);

    4.设置出现按钮的点击事件 

    //为弹窗中的文本添加点击事件
            v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了选择", Toast.LENGTH_LONG).show();
                    window.dismiss(); //控制弹窗消失
                }
            });
    
            //为弹窗中的文本添加点击事件
            v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了全选", Toast.LENGTH_LONG).show();
                    window.dismiss();
                }
            });
    
            //为弹窗中的文本添加点击事件
            v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了复制", Toast.LENGTH_LONG).show();
                    window.dismiss();
                }
            });

    mainActivity.java完整代码

    package com.example.dialog;
    
    import androidx.annotation.NonNull;
    import androidx.annotation.Nullable;
    import androidx.appcompat.app.AlertDialog;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.content.DialogInterface;
    import android.graphics.Canvas;
    import android.graphics.Color;
    import android.graphics.ColorFilter;
    import android.graphics.drawable.ColorDrawable;
    import android.graphics.drawable.Drawable;
    import android.os.Bundle;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.widget.PopupWindow;
    import android.widget.Toast;
    
    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }
    
        public void showNormalDialog(){
            AlertDialog dialog = new AlertDialog.Builder(this).create();
            dialog.setTitle("提示");
            dialog.setMessage("您确定要退出程序吗?");
            dialog.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
    
                }
            });
            dialog.show();
        }
    
    
        public void myClick(View view) {
            switch (view.getId()) {
                case R.id.normal_dialog_btn:
                    //1.实例化一个Buidler
                    //AlertDialog的构造方法时protected
                    AlertDialog.Builder builder = new AlertDialog.Builder(this);
                    //2.设置对话框样式
                    builder.setTitle("提示");
                    builder.setMessage("您确定退出程序吗?");
                    builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            finish();
                        }
                    });
                    //展示 
                    builder.setNegativeButton("取消", null);
                    builder.show();
    //                AlertDialog dialog = builder.create();
    //                dialog.show();
                    break;
    
                case R.id.diy_dialog_btn:
                    Mydialog md = new Mydialog(this, R.style.mydialog);
                    md.show();
                    break;
    
                case R.id.popup_btn:
                    showPopupWindow(view);
                    break;
            }
        }
    
        public void showPopupWindow(View view) {
            //准备弹出所需要的视图对象
            View v = LayoutInflater.from(this).inflate(R.layout.popup_layout, null);
            //1.实例化对象
           //将整个布局变成View
            //参数1:用在弹窗中的View
            //参数2,3:弹窗的宽高
            //参数4(focusable): 能否获取焦点
            PopupWindow window = new PopupWindow(v, 600, 80, true);
    
            //2.设置(背景, 动画)
            //设置背景
            window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); //设置背景为透明色
            //设置能响应外部的点击事件
            window.setOutsideTouchable(true);
            //设置能响应点击事件
            window.setTouchable(true);
            //1.创建动画资源 2.创建一个style应用动画资源 3.对当前弹窗的动画风格设置为第二步的资源索引
            window.setAnimationStyle(R.style.translate_anim);
            //3.显示
            //参数1(anchor):锚
            //参数2,3:相对于锚在x,y方向上的偏移量
            window.showAsDropDown(view, -600, 0);
    
            //为弹窗中的文本添加点击事件
            v.findViewById(R.id.choose).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了选择", Toast.LENGTH_LONG).show();
                    window.dismiss(); //控制弹窗消失
                }
            });
    
            //为弹窗中的文本添加点击事件
            v.findViewById(R.id.choose_all).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了全选", Toast.LENGTH_LONG).show();
                    window.dismiss();
                }
            });
    
            //为弹窗中的文本添加点击事件
            v.findViewById(R.id.copy).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Toast.makeText(MainActivity.this, "您点击了复制", Toast.LENGTH_LONG).show();
                    window.dismiss();
                }
            });
        }
    }
  • 相关阅读:
    友盟上报 IOS
    UTF8编码
    Hill加密算法
    Base64编码
    Logistic Regression 算法向量化实现及心得
    152. Maximum Product Subarray(中等, 神奇的 swap)
    216. Combination Sum III(medium, backtrack, 本类问题做的最快的一次)
    77. Combinations(medium, backtrack, 重要, 弄了1小时)
    47. Permutations II(medium, backtrack, 重要, 条件较难思考)
    3.5 find() 判断是否存在某元素
  • 原文地址:https://www.cnblogs.com/my-love-is-python/p/14584715.html
Copyright © 2011-2022 走看看