zoukankan      html  css  js  c++  java
  • PopupWindowMenuUtil【popupwindow样式菜单项列表】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处!

    前言

    实现PopupWindow样式的Menu菜单。

    效果图

    代码分析

    使用PopupWindow实现。

    列表使用的是Recyclerview。

    实现了当设置当大于6个列表项的时候,设置列表总高度值为6个列表项的高度值。

    如果不想有左侧的图标,则不传入图片的id值即可,因为默认值为0。

    使用步骤

    一、项目组织结构图

    注意事项:

    1、  导入类文件后需要change包名以及重新import R文件路径

    2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

    二、导入步骤

    在APP中的bundle.gradle文件中添加以下代码,引入design【版本号跟appcompat-v7的保持一致】

    apply plugin: 'com.android.application'
    
    android {
        compileSdkVersion 27
        defaultConfig {
            applicationId "com.why.project.popupwindowmenuutildemo"
            minSdkVersion 16
            targetSdkVersion 27
            versionCode 1
            versionName "1.0"
            testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        }
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    }
    
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation 'com.android.support:appcompat-v7:27.1.1'
        implementation 'com.android.support.constraint:constraint-layout:1.1.1'
        testImplementation 'junit:junit:4.12'
        androidTestImplementation 'com.android.support.test:runner:1.0.2'
        androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    
        //RecyclerView
        compile "com.android.support:recyclerview-v7:27.1.1"
    }

    将popupwindowMenu包中的文件复制到项目中

    将popup_menu_bg.9.png文件复制到项目的drawable-xhdpi中

    将布局文件复制到项目中

    至此,PopupWindowMenuUtil就可以使用了。

    三、使用方法

    activity_main布局文件

    <?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="52dp"
            android:orientation="horizontal"
            android:background="#ffffff"
            >
    
            <!-- 固定图标(更多) -->
            <ImageView
                android:id="@+id/moreImg"
                android:layout_width="wrap_content"
                android:layout_height="match_parent"
                android:src="@drawable/nav_more_h"
                android:contentDescription="@string/app_name"
                android:gravity="center_vertical"
                android:paddingLeft="15dp"
                android:paddingRight="15dp"
                android:layout_alignParentRight="true"
                />
    
        </RelativeLayout>
        <!-- 中横线 -->
        <View
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#e9e9e9"
            />
    
    </LinearLayout>

    MainActivity文件

    package com.why.project.popupwindowmenuutildemo;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    import com.why.project.popupwindowmenuutildemo.popupwindowMenu.PopUpMenuBean;
    import com.why.project.popupwindowmenuutildemo.popupwindowMenu.PopupWindowMenuUtil;
    
    import java.util.ArrayList;
    
    public class MainActivity extends AppCompatActivity {
    
        /**更多图标*/
        private ImageView mMoreImg;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initViews();
            initEvents();
        }
    
        private void initViews() {
            mMoreImg = (ImageView)findViewById(R.id.moreImg);
        }
    
        private void initEvents() {
            mMoreImg.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    openMenu();//弹出更多操作的menu列表
                }
            });
        }
    
        //弹出更多操作的menu列表
        private void openMenu(){
            final ArrayList<PopUpMenuBean> menuList = new ArrayList<PopUpMenuBean>();
    
            PopUpMenuBean popUpMenuBean = new PopUpMenuBean();
            popUpMenuBean.setImgResId(R.drawable.nav_menu_share);
            popUpMenuBean.setItemStr("分享");
            menuList.add(popUpMenuBean);
    
            PopUpMenuBean popUpMenuBean1 = new PopUpMenuBean();
            popUpMenuBean1.setImgResId(R.drawable.nav_menu_fabu);
            popUpMenuBean1.setItemStr("发布");
            menuList.add(popUpMenuBean1);
    
            PopupWindowMenuUtil.showPopupWindows(MainActivity.this, mMoreImg, menuList, new PopupWindowMenuUtil.OnListItemClickLitener() {
                @Override
                public void onListItemClick(int position) {
                    //如果position == -1,预留位,用来标明是点击弹出框外面的区域
                    if(position != -1) {
                        if(menuList.get(position).getItemStr().equals("发布")){
                            Toast.makeText(MainActivity.this,"发布",Toast.LENGTH_SHORT).show();
                        }else if(menuList.get(position).getItemStr().equals("分享")){
                            Toast.makeText(MainActivity.this,"分享",Toast.LENGTH_SHORT).show();
                        }
                    }
                }
            });
        }
    }

    混淆配置

    参考资料

    暂时空缺

    项目demo下载地址

    https://github.com/haiyuKing/PopupWindowMenuUtilDemo

  • 相关阅读:
    java--Eclipse for mac 代码提示(代码助手,代码联想)快捷键修改
    简单的实现web聊天界面,一对一
    使用ajax方法实现form表单的提交
    select下拉框选择触发事件
    java定时执行任务(一)
    抽象类与接口对比
    SpringMVC拦截器实现登录认证(转发)
    两道关于数字转换的题
    Java之Math类使用小结(转发)
    WordPattern
  • 原文地址:https://www.cnblogs.com/whycxb/p/9159778.html
Copyright © 2011-2022 走看看