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

posted @ 2018-06-10 21:10  HaiyuKing  阅读(1269)  评论(0编辑  收藏  举报