代码拉取完成,页面将自动刷新
从事多年Android开发,总结下一些日常所使用的自定义的组件,以及Utils工具包,方便日后更好接入,无需要重复的复制粘贴代码。
android {
allprojects {
repositories {
jcenter()
maven { url "https://www.jitpack.io" }
}
}
}
dependencies {
implementation 'com.gitee.zhqhandsome:ZhqAndroidUtils:v1.0.4'
}
new PermissionManage.Builder(this)
.setPermission(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
, Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CALL_PHONE,
android.Manifest.permission.READ_CONTACTS,
Manifest.permission.CAMERA
})
.setPermissionOnListener(new PermissionManage.PermissionOnListener() {
@Override
public void callBackApiLowSdk(int sdkCode) {
//TODO
}
})
.builder()
.requestPermission();
<com.zhq.apputil.widget.NavigationMenuBar
android:id="@+id/navigation_menuBar"
android:layout_width="match_parent"
android:layout_height="49dp"
app:bottom_count="4"
app:shadow_line_color="@color/separation"
app:shadow_line_width="1dp"
app:text_color_normal="@color/tab_bottom_font_color"
app:text_color_pressed="@color/tab_bottom_pressed_font_color"
app:button_select_color_normal="@color/white"
app:button_select_color_pressed="@color/separation"
app:text_color_normal="@color/tab_bottom_font_color"
app:text_color_pressed="@color/tab_bottom_pressed_font_color"
app:text_font_size="12sp"/>
bottomMenuBar.setBottomNameResource(new CharSequence[]{"首页", "分类", "购物车", "我的"})
.setImageResource(
new int[]{R.mipmap.home_tab_normal, R.mipmap.alarm_tab_normal, R.mipmap.work_order_tab_normal,
R.mipmap.mine_tab_normal},
new int[]{R.mipmap.home_tab_pressed, R.mipmap.alarm_tab_pressed, R.mipmap.work_order_tab_pressed,
R.mipmap.mine_tab_pressed}
)
.setFontPadding(NavigationMenuBar.TOP, 5)
.setBottomMenuBackgroundColor(getResources().getColor(R.color.bottomBar_background_color))
.initToPosition(0)
.builder();
bottomMenuBar.setOnTabSelectedListener(new NavigationMenuBar.OnTabSelectedListener(){
@Override
public void onTabSelected(int currentPosition, int lastIndex) {
//TODO
}
});
<com.zhq.apputil.widget.IconTextView
android:id="@+id/icon_set"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:layout_weight="1"
android:drawablePadding="10dp"
android:gravity="center|left"
android:text="@string/set"
android:textColor="@color/white"
android:textSize="16sp"
app:drawable_src="@mipmap/mine_setting"
app:imageHeight="25dp"
app:imageLocation="left"
app:imageWidth="25dp" />
<com.zhq.apputil.widget.ClearEditText
android:id="@+id/autoCompleteUserName"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:drawablePadding="10dp"
android:hint="@string/prompt_email"
android:imeOptions="normal"
android:inputType="text"
android:maxLines="1"
android:singleLine="true"
android:textColor="@color/white"
android:textColorHint="@color/light_gray"
android:textCursorDrawable="@drawable/corner_cursor" />
<com.zhq.apputil.widget.CircleImageView
android:id="@+id/headImageView"
android:layout_width="74dp"
android:layout_height="74dp"
android:layout_centerVertical="true"
android:layout_marginLeft="25dp"
android:layout_marginTop="50dp"
android:src="@mipmap/head_default_logo"
app:border_color="@color/white"
app:border_width="2dp"/>
<com.zhq.apputil.widget.ShapeTextView
android:id="@+id/tvSubstation"
android:layout_width="0dp"
android:layout_height="30dp"
android:layout_marginRight="10dp"
android:layout_weight="1"
android:gravity="center"
android:text="电站 ▼"
android:textSize="12sp"
android:textColor="@color/state_selected"
app:appBgColor="#4A5A84"
app:appBorder="false"
app:appBottomLeftCorner="false"
app:appBottomRightCorner="false"
app:appRadius="2dp"
app:appTopLeftCorner="true"
app:appTopRightCorner="true" />
@Override
public StateLayout.Builder getBuilderLayout() {
return new StateLayout.Builder(this)
.setStateLayout(R.layout.state_layout)
.setStateLayoutViewId(R.id.button_retry)
.onRetryListener(new OnRetryListener() {
@Override
public void onRetry() {
//TODO
}
});
}
@Override
public void showEmpty() {
showRootView(mRecyclerView);
rootView.showEmptyView();
}
@Override
public void showFailure(String error) {
showRootView(mRecyclerView);
rootView.showFailView();
}
@Override
public TitleBarLayout getTitleBarLayout() {
return new TitleBarLayout(this)
.setTitleBarTitleName(getIntent().getExtras().getString("name"));
}
/****
* 添加TitleBar控件,开发人员不用操心视图xml头部元素
*/
public void addTitleBarView() {
View rootView = ((ViewGroup) findViewById(android.R.id.content)).getChildAt(0);
if (rootView != null && getTitleBarLayout() != null) {
titleBarLayout = getTitleBarLayout();
titleBarLayout
.setTitleBarBackDrawableLeftSrc(R.drawable.ic_arrow_back_white_24dp)
.setTitleBarBackFontColor(R.color.white)
.setTitleBarTitleColor(R.color.white)
.setTitleRightFontColor(R.color.white)
.setTitleBarTitleFontSize(15)
.setTitleBarFontSize(15)
.setTitleBarBackground(getResources().getDrawable(R.drawable.divider_bottom_gray_line))
.setBackDrawableLeftWidthHeight(24, 24)
.setFontLeftPadding(TitleBarLayout.LEFT, 10)
.setFontRightPadding(TitleBarLayout.RIGHT, 10)
.setTitleBarBackOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finishActivity();
}
})
.build();
if (rootView instanceof LinearLayout) {
LinearLayout linearParent = (LinearLayout) rootView;
linearParent.addView(titleBarLayout, 0);
} else if (rootView instanceof RelativeLayout) {
RelativeLayout relativeParent = (RelativeLayout) rootView;
titleBarLayout.setId(R.id.titleBar_id);
relativeParent.addView(titleBarLayout, 0);
View view = relativeParent.getChildAt(1);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
params.addRule(RelativeLayout.BELOW, R.id.titleBar_id);
view.setLayoutParams(params);
}
}
}
<com.zhq.apputil.widget.TabBarIndicatorLayout
android:id="@+id/stl"
android:layout_width="match_parent"
android:layout_height="48dp"
app:tab_count="8"
android:background="#30394D" />
slidingTabLayout.setTabBarIndicator(new TabBarItemBean.Builder()
.setSelectPosition(0)
.setTabBarNormalColor("#ffffff")
.setTabBarPressedColor("#ffffff")
.setTabBarIndicatorColor("#00B0FF")
.setTabBarSelectFontSize(14)
.setTabBarUnSelectFontSize(13)
.setTabBarScrolled(true)
.setTabBarIndicatorHeight(ScreenUtils.dpToPx(getResources(), 2))
.setTabBarTitle(mTitles)
.setTabBarPressedType(new Integer[]{AppConstant.WorkOrder.GET_ALL, AppConstant.WorkOrder.WAIT_AUDIT,
AppConstant.WorkOrder.WAIT_RECEIVER, AppConstant.WorkOrder.HAVE_IN_HAND, AppConstant.WorkOrder.WAIT_SURE,
AppConstant.WorkOrder.ALREADY_COMPLETED, AppConstant.WorkOrder.ALREADY_EXIT, AppConstant.WorkOrder.AUDIT_REJECT})
.setTabBarViewPager(mViewPager)
.build()
).show();
ScrollViewPagerAdapter mAdapter = new ScrollViewPagerAdapter(getChildFragmentManager(), mFragments, mTitles);
mViewPager.setAdapter(mAdapter);
// 缺少权限时, 进入权限配置页面
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
&& ContextCompat.checkSelfPermission(mContext, android.Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(getActivity(),
new String[]{android.Manifest.permission.READ_CONTACTS,
android.Manifest.permission.WRITE_CONTACTS, android.Manifest.permission.CAMERA}
, PermissionManage.SDK_PERMISSION_REQUEST);
} else {
ImageConfig imageConfig = new ImageConfig.Builder(
new GlideLoader())
.steepToolBarColor(getResources().getColor(R.color.colorPrimary))
.titleBgColor(getResources().getColor(R.color.colorPrimary))
.titleSubmitTextColor(getResources().getColor(R.color.white))
.titleTextColor(getResources().getColor(R.color.white))
.setTitleImageResource(R.drawable.ic_arrow_back_white_24dp)
.mutiSelect()
.singleSelect()
.pathList(new ArrayList<>())
.filePath(new StringBuilder(File.separator).append("com.cndz").append(File.separator).append("ImageTemp").toString())
.showCamera()
.crop()
.requestCode(BasePresenter.REQUEST_Gallery_CODE)
.build();
ImageSelector.open(getActivity(), imageConfig); // 开启图片选择器
}
<com.zhq.apputil.widget.MultiImageView
android:id="@+id/multiImageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:multi_border_color="@color/white"
app:multi_border_overlay="true"
app:multi_border_width="1dp"
app:multi_overlay_radius="5dp"
app:multi_right_bottom_corner="true"
app:multi_right_top_corner="true"
app:multi_top_bottom_corner="true"
app:multi_top_left_corner="true"/>
multiImageView.setOnItemClickListener(new OnItemLoadImageListener() {
@Override
public void loadImageView(ImageView imageView, String imageUrl, GildeImageConfig gildeImageConfig) {
if (gildeImageConfig.isBorderOverlay()) {
Glide.with(getContext())
.load(imageUrl)
.skipMemoryCache(true)
.placeholder(R.mipmap.imageselector_photo)
.transition(DrawableTransitionOptions.withCrossFade(500)) // 渐变
.transform(new CornerTransform(getContext(), gildeImageConfig)))
.diskCacheStrategy(DiskCacheStrategy.NONE).into(imageView);
} else {
Glide.with(getContext()).load(imageUrl)
.placeholder(R.mipmap.imageselector_photo)
.transition(DrawableTransitionOptions.withCrossFade(500)) // 渐变
.diskCacheStrategy(DiskCacheStrategy.ALL).into(imageView);
}
}
@Override
public void onItemClick(View view, int p) {
//TODO
}
});
<com.zhq.apputil.widget.AppleRefreshView
android:id="@+id/refresh_view"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scrollbars="none"/>
</com.zhq.apputil.widget.AppleRefreshView>
appleRefreshView.setRefreshListener(new AppleRefreshView.RefreshListener() {
@Override
public void onRefresh() {
//TODO
}
});
//对外提供判断上拉、下拉条件,根据当前节点的view来判断是否可以下拉刷新
appleRefreshView.registerPullableListener(new Pullable(){
@Override
public boolean canPullDown(View childView) {
//TODO
}
@Override
public boolean canPullUp(View childView) {
//TODO
}
});
dependencies {
//骨架屏
implementation 'com.ethanhua:skeleton:1.1.2'
implementation 'io.supercharge:shimmerlayout:2.1.0'
}
//recyclerAdapter使用
NewsAdapter adapter = new NewsAdapter();
final SkeletonScreen skeletonScreen = Skeleton.bind(recyclerView)
.adapter(adapter)
.shimmer(true)
.angle(20)
.frozen(false)
.duration(1200)
.count(10)
.load(R.layout.item_skeleton_news)
.show(); //default count is 10
recyclerView.postDelayed(new Runnable() {
@Override
public void run() {
skeletonScreen.hide();//隐藏骨架屏
}
}, 3000);
//activity中的使用
View rootView = findViewById(R.id.rootView);//注册根目录
SkeletonScreen skeletonScreen = Skeleton.bind(rootView)
.load(R.layout.activity_view_skeleton)//给用户看到的加载item
.duration(1000)
.color(R.color.shimmer_color)
.angle(0)
.show();
//布局加载使用
<com.zhq.apputil.widget.GifView
android:id="@+id/gif_view"
android:layout_width="50dp"
android:layout_height="60dp"
app:gif="@drawable/get_fire"/>
//对外提供方法
setMovieResouce(int movieResId);
setMovieTime(int time);
setPaused(boolean paused);
boolean isPaused();
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型