DropDownMenu下拉筛选排序Menu,androidjetpack详解

//tab选中图标

private int menuSelectedIcon;

//tab未选中图标

private int menuUnselectedIcon;

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);

setOrientation(VERTICAL);

//为DropDownMenu添加自定义属性

int menuBackgroundColor = 0xffffffff;

int underlineColor = 0xffcccccc;

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);

a.recycle();

//初始化tabMenuView并添加到tabMenuView

tabMenuView = new LinearLayout(context);

LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);

tabMenuView.setOrientation(HORIZONTAL);

// tabMenuView.setBackgroundColor(menuBackgroundColor);

tabMenuView.setBackgroundColor(Color.parseColor("#eeedeb"));

tabMenuView.setLayoutParams(params);

addView(tabMenuView, 0);

//为tabMenuView添加下划线

View underLine = new View(getContext());

underLine.setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpTpPx(1.0f)));

underLine.setBackgroundColor(underlineColor);

addView(underLine, 1);

//初始化containerView并将其添加到DropDownMenu

containerView = new FrameLayout(context);

containerView.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT));

addView(containerView, 2);

}

/**

* 初始化__DropDownMenu

* * @param tabTexts

* @param popupViews

*/

public void setDropDownMenu(@NonNull List tabTexts, @NonNull List popupViews) {

if (tabTexts.size() != popupViews.size()) {

throw new IllegalArgumentException(“params not match, tabTexts.size() should be equal popupViews.size()”);

}

for (int i = 0; i < tabTexts.size(); i++) {

addTab(tabTexts, i);

}

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();

}

});

containerView.addView(maskView, 0);

maskView.setVisibility(GONE);

popupMenuViews = new FrameLayout(getContext());

popupMenuViews.setBackgroundColor(maskColor);

containerView.addView(popupMenuViews, 1);

popupMenuViews.setVisibility(GONE);

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);

}

}

private void addTab(@NonNull List tabTexts, int i) {

final TextView tab = new TextView(getContext());

tab.setSingleLine();

tab.setEllipsize(TextUtils.TruncateAt.END);

tab.setGravity(Gravity.CENTER);

tab.setTextSize(TypedValue.COMPLEX_UNIT_PX,menuTextSize);

tab.setLayoutParams(new LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f));

tab.setTextColor(textUnselectedColor);

tab.setCompoundDrawablesWithIntrinsicBounds(null, null, getResources().getDrawable(menuUnselectedIcon), null);

tab.setText(tabTexts.get(i));

tab.setPadding(dpTpPx(5), dpTpPx(12), dpTpPx(5), dpTpPx(12));

//添加点击事件

tab.setOnClickListener(new OnClickListener() {

@Override

public void onClick(View v) {

//展开、收起、切换Tab的menu

switchMenu(tab);

}

});

tabMenuView.addView(tab);

//添加分割线

if (i < tabTexts.size() - 1) {

View view = new View(getContext());

view.setLayoutParams(new LayoutParams(dpTpPx(0.5f), ViewGroup.LayoutParams.MATCH_PARENT));

view.setBackgroundColor(dividerColor);

tabMenuView.addView(view);

}

}

/**

* 改变__tab__文字

*

* @param text

*/

public void setTabText(String text) {

if (current_tab_position != -1) {

((TextView) tabMenuView.getChildAt(current_tab_position)).setText(text);

}

}

public void setTabClickable(boolean clickable) {

for (int i = 0; i < tabMenuView.getChildCount(); i = i + 2) {

tabMenuView.getChildAt(i).setClickable(clickable);

}

}

/**

* 关闭菜单

*/

public void closeMenu() {

if (current_tab_position != -1) {

((TextView) tabMenuView.getChildAt(current_tab_position)).setTextColor(textUnselectedColor

《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》

【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享

);

((TextView) tabMenuView.getChildAt(current_tab_position)).setCompoundDrawablesWithIntrinsicBounds(null, null,

getResources().getDrawable(menuUnselectedIcon), null);

popupMenuViews.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_menu_out));

popupMenuViews.postDelayed(new Runnable() {

@Override

public void run() {

popupMenuViews.setVisibility(View.GONE);

}

}, 250);

maskView.setAnimation(AnimationUtils.loadAnimation(getContext(), R.anim.dd_mask_out));

maskView.postDelayed(new Runnable() {

@Override

public void run() {

maskView.setVisibility(GONE);

}

}, 250);

current_tab_position = -1;

}

}

/**

* DropDownMenu__是否处于可见状态

*

* @return

*/

public boolean isShowing() {

return current_tab_position != -1;

}

/**

* 切换菜单

*

* @param target

*/

private void switchMenu(View target) {

System.out.println(current_tab_position);


版权声明:本文为m0_65145113原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。