在项目根目录 build.gradle
下添加仓库地址
allprojects {
repositories {
...
maven { url 'coming soon' }
...
}
}
在应用Module app
根目录 build.gradle
添加如下配置
implementation 'com.zndroid:MenuBox:1.0.4'//(建议指定版本)
//或者
implementation 'com.zndroid:MenuBox:latest.release'//保持最新版
然后点击同步按钮进行代码同步
目前支持链式调用,方便快捷。样例中 this
指的是上下文 Activity
,view
指的是依附显示的 View
。
目前可以设置:整体菜单栏出现方向(上、下、左、右)、菜单栏大小(默认内容充满自适应)、背景色、背景透明度、菜单栏进出动画类型(默认内部支持,可通过 R.style.anim_menu_box_xxx
指定,也可以自定义)、菜单标题文字相关定制、支持点击透传、设置菜单项个数以及点击行为等等。以上均通过 MenuBox.Builder
设置之后调用 create()
方法进行创建,最终调用 showFromXXX()
方法展示。
MenuBox menuBox = new MenuBox.Builder(this)
默认为空,并不显示
build.setBoxTitle(String title)
默认: 14f
build.setBoxTitleSize(float titleSize)
默认: 黑色
build.setBoxTitleColor(@ColorInt int titleColor)
默认:图标 X
实现
build.setBoxCloseImage(@DrawableRes int resId)
默认: 白色
build.setBoxBgColor(@ColorInt int colorInt)
build.setBackGroundLevel(float level)//0.0f-1.0f
建议不用设置,默认自适应
build.setWidthAndHeight(int width, int height)
默认实现了一套动画,通过 R.style.anim_menu_box_
可以使用自带动画,
包括常见的 滑动
、 下拉
、 弹出
、抖动
动画。
build.setAnimationStyle(int animationStyle)
build.setMenuItemList(List<MenuItem> menuItemList)
build.setOnItemClick(IMenuItemClick itemClick)
可根据具体需要设置子菜单项布局,左右显示时,建议设置为 1
,系统会进行默认自适应居中布局,改参数受数据源影响
build.setRow(int row)
默认子菜单项横向布局,如果是左右弹出菜单项请设置为 true
竖向布局,比较美观
build.setVertical(boolean vertical)
默认点击菜单栏以外的部分会消失菜单栏,如果下层元素可以处理点击事件并不会触发,如果需要触发请设置为 true
。
build.setOutsideTouchable(boolean touchable)
默认无缩放动画
build.withButtonAnimation(boolean showAnimation)
最终通过该方法创建菜单栏的实体
build.create()
目前支持 上、下、左、右
弹出菜单栏,默认贴边自适应显示,如果不需要贴边显示,可以调用其带有偏移量的构造方法
menuBox.showFromXXX(xxx)
目前菜单项包含:
菜单标题 setTitle(String title)
,
标题字体颜色 setFrontColor(@ColorInt int frontColor)
,
标题字体大小 setFrontSize(float frontSize)
,
图标 setIconId(@DrawableRes int iconId)
,
红点显示 setShowDot(boolean showDot)
(默认不显示,用于提示新功能等场景),
其中 position 索引位置
属性为回调属性,初始化时无需设置,方便开发者处理红点状态。
package com.app.menubox;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import com.arcvideo.component.menubox.MenuBox;
import com.arcvideo.component.menubox.core.IMenuItemClick;
import com.arcvideo.component.menubox.core.MenuItem;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
public class MainActivity extends AppCompatActivity {
private boolean isShow = true;
private SharedPreferences sharedPreferences;
private MenuBox menuBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sharedPreferences = getSharedPreferences("sp_test", Context.MODE_PRIVATE);
}
public void show_menu(View view) {
List<MenuItem> list = new CopyOnWriteArrayList<>();
MenuItem item1 = new MenuItem();
item1.setIconId(R.mipmap.icon_camera_phone);
item1.setFrontSize(14.0f);
item1.setTitle("标题1");
MenuItem item2 = new MenuItem();
item2.setIconId(R.mipmap.icon_camera_phone);
item2.setTitle("标题2");
MenuItem item3 = new MenuItem();
item3.setIconId(R.mipmap.icon_camera_phone);
//红点处理 start
if (sharedPreferences.getBoolean("item3", true))
item3.setShowDot(true);
else
item3.setShowDot(false);
//红点处理逻辑 end
item3.setTitle("标题3");
list.add(item1);
list.add(item2);
list.add(item3);
menuBox = new MenuBox.Builder(this)
.setMenuItemList(list)
.setRow(3)
.setBoxTitle("工具箱")
.setBoxTitleSize(20.0f)
.setBoxCloseImage(R.mipmap.icon_control_camera_up_pressed)
.setOnItemClick(new IMenuItemClick() {
@Override
public void onItemClick(MenuItem item) {
if (item.getPosition() == 2)
sharedPreferences.edit().putBoolean("item3", false).apply();
Toast.makeText(MainActivity.this, item.getTitle(), Toast.LENGTH_SHORT).show();
}
})
.setOutsideTouchable(false)
.setAnimationStyle(R.style.anim_menu_box_top_over_shoot_style)
.create();
menuBox.showFromTop(view, this);
}
public void test(View view) {
Toast.makeText(MainActivity.this, "im clicked", Toast.LENGTH_SHORT).show();
}
}