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