package com.hyg.dropdownmenu;
import android.content.Context;
import android.content.res.TypedArray;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import java.util.List;
/**
* 使用时,在这个布局最外层的view添加android:layout_below="@id/dropDownMenu_underLine"这一行代码。
* Created by HuangYuGuang on 2016/4/14.
*/
public class DropDownMenu extends RelativeLayout {
//底层参照物控件,作为其他控件布局时候的相对参照
private LinearLayout tabMenuViewButtom;
//顶部菜单布局
private LinearLayout tabMenuView;
//底部容器,包含popupMenuViews,maskView
private View containerView;
//弹出菜单父布局
private FrameLayout popupMenuViews;
//遮罩半透明View,点击可关闭DropDownMenu
private View maskView;
//tabMenuView里面选中的tab位置,-1表示未选中
private int current_tab_position = -1;
//分割线颜色
private int dividerColor = 0xffcccccc;
//tab选中颜色
private int textSelectedColor = 0xff890c85;
//tab未选中颜色
private int textUnselectedColor = 0xff111111;
//遮罩颜色
private int maskColor = 0x88888888;
//tab字体大小
private int menuTextSize = 14;
//tab选中图标
private int menuSelectedIcon;
//tab未选中图标
private int menuUnselectedIcon;
//菜单背景色
private int menuBackgroundColor = 0xffffffff;
//菜单下面的分割线颜色
private int underlineColor = 0xffcccccc;
//菜单的箭头是否靠右边
private boolean menuIconToRight = false;
public DropDownMenu(Context context) {
super(context, null);
}
public DropDownMenu(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public DropDownMenu(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
//为DropDownMenu添加自定义属性
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownMenu);
underlineColor = a.getColor(R.styleable.DropDownMenu_ddunderlineColor, underlineColor);
dividerColor = a.getColor(R.styleable.DropDownMenu_dddividerColor, dividerColor);
textSelectedColor = a.getColor(R.styleable.DropDownMenu_ddtextSelectedColor, textSelectedColor);
textUnselectedColor = a.getColor(R.styleable.DropDownMenu_ddtextUnselectedColor, textUnselectedColor);
menuBackgroundColor = a.getColor(R.styleable.DropDownMenu_ddmenuBackgroundColor, menuBackgroundColor);
maskColor = a.getColor(R.styleable.DropDownMenu_ddmaskColor, maskColor);
menuTextSize = a.getDimensionPixelSize(R.styleable.DropDownMenu_ddmenuTextSize, menuTextSize);
menuSelectedIcon = a.getResourceId(R.styleable.DropDownMenu_ddmenuSelectedIcon, menuSelectedIcon);
menuUnselectedIcon = a.getResourceId(R.styleable.DropDownMenu_ddmenuUnselectedIcon, menuUnselectedIcon);
menuIconToRight = a.getBoolean(R.styleable.DropDownMenu_ddmenuIconToRight, menuIconToRight);
a.recycle();
//初始化tabMenuView并添加到tabMenuView的参照物
tabMenuViewButtom = new LinearLayout(context);
tabMenuViewButtom.setId(R.id.dropDownMenu_tabMenuView);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
addView(tabMenuViewButtom,0);
//为tabMenuView添加下划线
View underLine = new View(getContext());
underLine.setId(R.id.dropDownMenu_underLine);
LayoutParams lp = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 1);
lp.addRule(RelativeLayout.BELOW, R.id.dropDownMenu_tabMenuView);
underLine.setLayoutParams(lp);
underLine.setBackgroundColor(underlineColor);
addView(underLine, 1);
}
/**
* 初始化DropDownMenu
*
* @param tabTexts
* @param popupViews
*/
public void setDropDownMenu(@NonNull List<String> tabTexts, @NonNull List<View> popupViews) {
if (tabTexts.size() != popupViews.size()) {
throw new IllegalArgumentException("params not match, tabTexts.size() should be equal popupViews.size()");
}
LayoutParams plp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
plp.addRule(RelativeLayout.BELOW, R.id.dropDownMenu_underLine);
maskView = new View(getContext());
maskView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));
maskView.setBackgroundColor(maskColor);
maskView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
closeMenu();
}
});
maskView.setVisibility(GONE);
maskView.setLayoutParams(plp);
addView(maskView);
popupMenuViews = new FrameLayout(getContext());
popupMenuViews.setVisibility(GONE);
popupMenuViews.setLayoutParams(plp);
addView(popupMenuViews);
for (int i = 0; i < popupViews.size(); i++) {
popupViews.get(i).setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
popupMenuViews.addView(popupViews.get(i), i);
}
//初始化tabMenuView并添加到tabMenuView,为了能tabMenuView使位于顶层,所以最后添加tabMenuView
tabMenuView = new LinearLayout(getContext());
tabMenuView.setId(R.id.dropDownMenu_tabMenuView);
LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
tabMenuView.setOrientation(LinearLayout.HORIZONTAL);
tabMenuView.setBackgroundColor(menuBackgroundColor);
tabMenuView.setLayoutParams(params);
addView(tabMenuView);
for (int i = 0; i < tabTexts.size(); i++) {
addTab(tabTexts, i);
}
//为了使tabMenuViewButtom和tabMenuView的高度一样
LayoutParams tparams = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,tabMenuView.getHeight());
tabMenuViewButtom.setLayoutParams(tparams);
}
private void addTab(@NonNull List<String> tabTexts, int i) {
final TextView tab = new TextView(getContext());
LinearLayout menuItenmView = new LinearLayout(getContext());
menuItenmView.setLayoutParams(new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));
menuItenmView.setGravity(Gravity.CENTER);
menuItenmView.setOrientation(LinearLayout.HORIZONTAL);
tab.setSingleLine();
tab.setEllipsize(TextUtils.TruncateAt.END);
tab.setGravity(Gravity.CENTER);
tab.setTextSize(TypedValue.COMPLEX_UNIT_PX, menuTextSize);
if(menuIconToRight)
tab.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
else
tab.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT));
tab.setTextColor(textUnselectedColor);
tab.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(menuUnselectedIcon), null);
tab.setText(tabTexts.get(i) + " ");
tab.setPa
没有合适的资源?快使用搜索试试~ 我知道了~
Android DropDownMenu下拉菜单
共53个文件
xml:23个
java:7个
png:6个
5星 · 超过95%的资源 需积分: 49 111 下载量 98 浏览量
2016-04-18
16:17:43
上传
评论
收藏 361KB ZIP 举报
温馨提示
一个使用方便快捷,调用简单,使代码更简洁优雅的下拉下单。代码可参考博客地址 http://blog.csdn.net/u010053224/article/details/51179251
资源推荐
资源详情
资源评论
收起资源包目录
DropDownMenu.zip (53个子文件)
gradlew.bat 2KB
gradlew 5KB
DropDownMenu.iml 943B
gradle.properties 872B
library
proguard-rules.pro 676B
src
androidTest
java
com
hyg
dropdownmenu
library
ApplicationTest.java 371B
main
res
drawable
shape_drop_down_uncheck_bg.xml 255B
selector_drop_drow_ok_bg.xml 290B
shape_drop_down_check_bg.xml 269B
values
colors.xml 391B
strings.xml 70B
attrs.xml 708B
ids.xml 244B
mipmap-xhdpi
drop_down_selected_icon.png 17KB
drop_down_unselected_icon.png 301B
drop_down_checked.png 17KB
anim
dd_menu_in.xml 221B
dd_mask_in.xml 210B
dd_menu_out.xml 221B
dd_mask_out.xml 210B
layout
item_list_icon_drop_down.xml 700B
item_list_text_drop_down.xml 733B
grid_drop_down_layout.xml 1017B
item_grid_drop_down.xml 485B
java
com
hyg
dropdownmenu
library
adapter
GridDropDownAdapter.java 2KB
ListTextDropDownAdapter.java 2KB
ListIconDropDownAdapter.java 2KB
DropDownMenu.java 12KB
AndroidManifest.xml 267B
.gitignore 7B
build.gradle 561B
library.iml 7KB
simple.gif 294KB
app
proguard-rules.pro 676B
src
androidTest
java
com
hyg
dropdownmenu
ApplicationTest.java 363B
main
res
menu
menu_main.xml 401B
drawable
mipmap-hdpi
ic_launcher.png 3KB
values
strings.xml 188B
styles.xml 202B
dimens.xml 216B
mipmap-mdpi
ic_launcher.png 2KB
mipmap-xhdpi
ic_launcher.png 5KB
layout
activity_main.xml 1KB
values-w820dp
dimens.xml 364B
java
com
hyg
dropdownmenu
MainActivity.java 6KB
AndroidManifest.xml 707B
app.iml 8KB
build.gradle 644B
libs
gradle
wrapper
gradle-wrapper.jar 49KB
gradle-wrapper.properties 236B
local.properties 473B
settings.gradle 28B
build.gradle 455B
共 53 条
- 1
资源评论
- Orz0132017-09-15还可以吧!谢谢楼主!
- forhaodream2018-05-25还可以吧!谢谢楼主!
hygok
- 粉丝: 7
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功