# GtUI **Repository Path**: gt50/GtUI ## Basic Information - **Project Name**: GtUI - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-02-20 - **Last Updated**: 2025-04-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README [![](https://jitpack.io/v/com.gitee.gt50/GtUI.svg)](https://jitpack.io/#com.gitee.gt50/GtUI) [![API](https://img.shields.io/badge/API-15%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=15) [![作者](https://img.shields.io/badge/%E4%BD%9C%E8%80%85-gt50-brightgreen.svg)](https://gitee.com/gt50) ## 自定义工具库 * [MuchThreadDown:多线程下载,支持断点续传](#muchthreaddown) * [AntiShake、OnNoDoubleClickListener:防止点击事件重复调用](#antishakeonnodoubleclicklistener) * [BgFLayout、BgTextView:自定义可设置背景的布局](#bgflayoutbgtextview) * [GtSeekBar:自定义SeekBar](#gtseekbar) * [PaintView:自定义手写板控件](#paintview) * [TryLightStatus:修改状态栏背景色](#trylightstatus) * [NestedRecyclerView、FlowLayout:流式布局,当一行显示不下自动跳转到第二行](#nestedrecyclerviewflowlayout) * [HaveHeaderRecyclerView:仿美团联动ListView](#haveheaderrecyclerview) * [floatingeditor:浮动编辑器,在键盘上面方显示](#floatingeditor) * [GsonUtils:解决int类型转换成double](#gsonutils) * [DateSelectDialog:日期选择器](#dateselectdialog) * [ImagePagerActivity:查看大图](#imagepageractivity) * [MultiGridView:九宫格图片显示控件,支持添加图片](#multigridview) * [SimpleAdapter:RecyclerView通用适配器](#simpleadapter) * [SpanUtil:一个TextView实现多种样式](#spanutil) * [TabLayoutUtils:设置TabLayout标签下指示器的宽度](#tablayoututils) * [TextWatcherUtils:检查页面中的输入框是否都有值](#textwatcherutils) * [GtGridView:表格组件](#gtgridview) #### 依赖 将其添加到根build.gradle文件(而不是模块build.gradle文件)中: ```Xml allprojects { repositories { maven { url "https://jitpack.io" } } } ``` 然后,将库添加到模块中 build.gradle ```Xml dependencies { implementation 'com.gitee.gt50:GtUI:Tag' } ``` ## MuchThreadDown ###### 线程的数量根据文件的大小自动分配,每个线程下载的数据量最多3M; ````Java new MuchThreadDown("http://img1.kuaimashi.com/69_1526641455014.mp4", "D:/video/").download(new OnDownloadListener() { @Override protected void onDownloadComplete(String name, String url, String filePath) { System.out.println("下载成功==" + "url:" + url); } @Override protected void onDownloadError(String url, Exception e) { System.out.println("下载失败==" + "url:" + url); } @Override protected void onDownloads(String url, int completed, int endIndex) { System.out.println("下载中==" + "url:" + url + ":(" + completed + "||" + endIndex + ")"); } }); //是否显示日志 public MuchThreadDown isShowLog(boolean showLog); //是否单线程下载 public MuchThreadDown isAlone(boolean alone); //是否覆盖下载 public MuchThreadDown isCover(boolean cover); ```` ## AntiShake、OnNoDoubleClickListener ````Java if(!AntiShake.check(view.getId())){ //处理点击事件后的逻辑 } view.setOnClickListener(new OnNoDoubleClickListener() { @Override public void onNoDoubleClick(View v) { //处理点击事件后的逻辑 } }); ```` ## BgFLayout、BgTextView #### 同类型的有 BgFLayout(帧布局)、BgLLayout(线性布局)、BgCLayout(约束布局) ```Xml ``` 全部属性 ```Xml ``` ## GtSeekBar ```Xml ``` ```Java gtSeekBar.setOnSlideChangeListener(new GtSeekBar.OnSlideChangeListener() { @Override public void OnSlideChangeListener(View view, int progress) { Log.e("拖动过程中的值:", String.valueOf(progress)); } @Override public void onSlideStopTouch(View view, int progress) { Log.e("停止滑动时的值:", String.valueOf(progress)); } }); ``` 全部属性 ```Xml ``` ## PaintView ```Xml ``` ```Java paintView.setProhibitTouch(true);//关闭手滑 paintView.setDraw(false);//只记录滑动过程中的路径,不画在PaintView上 paintView.drawBackground(bipmap);//把路径画在位图上 paintView.addPath(path);//添加路径并画出来 paintView.setOnCurrentDrawListener(new PaintView.OnCurrentDrawListener() { @Override public void onCurrentDraw() { //滑动过程中的监听 } }); ``` 全部属性 ```Xml ``` ## TryLightStatus ```Java static void setStatusBarColor(Activity activity, @ColorInt int color) ``` ## NestedRecyclerView、FlowLayout NestedRecyclerView是RecyclerView的子类,用法与RecyclerView一样,区别是: ```java recyclerView.setLayoutManager(new FlowLayoutManager()); ``` FlowLayout是ViewGroup的子类 ```xml ``` ```Java for (int i = 0; i < 10; i++) { TextView tv = new TextView(this); tv.setLayoutParams(new ViewGroup.LayoutParams(250, 100)); tv.setGravity(Gravity.CENTER); tv.setBackgroundColor(0xff123456); tv.setTextColor(Color.WHITE); tv.setText("测试" + i); fl_flow.addView(tv); } ``` 全部属性 ```xml ``` ##### 子布局比较复杂的可以使用NestedRecyclerView,便于扩展,简单的可以用FlowLayout,使用起来方便。 ## HaveHeaderRecyclerView 单独使用与RecyclerView一样 adapter继承CustomizeRVBaseAdapter 注意:adapter数据刷新要调用notifyChanged(),不要调用notifyDataSetChanged()(坑:RecyclerView.Adapter的notifyDataSetChanged()不允许继承) ##### 与列表联动使用 ```Java recyclerView.setOnManualScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { switch (newState) { // 当不滚动时 case RecyclerView.SCROLL_STATE_IDLE: // 判断滚动到底部 if (recyclerView.canScrollVertically(1)) { //左边的列表滚动到底部 } // 判断滚动到顶部 if (recyclerView.canScrollVertically(-1)) { //左边的列表滚动到顶部 } break; default: break; } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { int sectionForPosition = lvRight.getSelectedSectionForPosition(); //判断当左边当前选中项与sectionForPosition不相等时 //把左边列表滚动到sectionForPosition位置并做相应的选中处理 } }); ``` 当左边列表点击选中某一项时,调用setSelectionTitle(int position); ## floatingeditor ```Java /** * * @param context 上下文 * @param editorCallback 回调接口 * @param checkRule 检验规则 可为null * @param dimAmount 背景透明度 * @param isFinishOnTouchOutside 点击空白区域是否关闭编辑框 */ public static void openDefaultEditor(Context context, EditorCallback editorCallback, InputCheckRule checkRule, float dimAmount, boolean isFinishOnTouchOutside); /** * * @param context 上下文 * @param editorCallback 回调接口 * @param holder 编辑框样式 * @param checkRule 检验规则 可为null * @param dimAmount 背景透明度 * @param isFinishOnTouchOutside 点击空白区域是否关闭编辑框 */ public static void openEditor(Context context, EditorCallback editorCallback, EditorHolder holder, InputCheckRule checkRule, float dimAmount, boolean isFinishOnTouchOutside); ``` ## DateSelectDialog ```java new DateSelectDialog(activity).setOnSelectedListener(data -> { //选择后 }).setDefauleDate(date).setDatePattern(pattern).show(); ``` ## ImagePagerActivity ```java public static void startImagePagerActivity(Activity context, List imgUrls, int position); public static void startImagePagerActivity(Activity context, List imgUrls, int position, ImageSize imageSize); public static void startImagePagerActivity(Activity context, List imgUrls, int position, ImageSize imageSize, int showBn); public static void startImagePagerActivity(Activity context, List imgUrls,int position, ImageSize imageSize, int showBn, int requestCode); ``` ## MultiGridView ```xml ``` ```xml ``` ```java //设置初始数据 public void setFilenamesData(List initData) ; // 设置添加回调(点击添加的时候调用自己的媒体选择库,如果不设置会使用默认的媒体库 com.github.guting50:PhotoPicker) public void setOnAddListenerr(OnRemoveListener onRemoveListener); // 设置添加结束后回调 public void setOnAddedListener(OnRemoveListener onRemoveListener); // 获取图片结果 public List getPaths(); // 更新图片上传进度 public void updateProgress(final String localPath, final int progress); //更新完成后设置新的网络图片地址 public void updateSuccess(String localPath, String url); ``` ## SimpleAdapter ```java public SimpleAdapter(@NonNull Class holder); public SimpleAdapter(List data, @NonNull Class holder); public SimpleAdapter(Object obj, @NonNull Class holder); public SimpleAdapter(Object obj, List data, @NonNull Class holder); ``` 需要实现抽象类VHolder ## SpanUtil ```java SpanUtil.create() .addSection("仅再邀请1名好友,即可获得1张20元助力专享券") .setStyle("1名", Typeface.BOLD) .setForeColor("1名", 0xffEA3A0B) .setStyle("20元", Typeface.BOLD) .setForeColor("20元", 0xffEA3A0B) .showIn(textView); ``` 更多样式,请查看源码 ## TabLayoutUtils ```java public static void reflex(final TabLayout tabLayout, final int mW, final int mH, @ColorInt final int color); ``` ## TextWatcherUtils ```java //当所有的TextView都有值的时候 bnView的enabled = true public TextWatcherUtils(View bnView, TextView... textViews); //设置检测回调,调用check后的回调方法 public void addOnCheckedListener(OnCheckedListener onCheckedListener); public void removeOnCheckedListener(OnCheckedListener onCheckedListener); public void removeOnCheckedListener(); public void check(); public void addView(TextView... textViews); public void removeView(TextView... textViews); ``` ## GtGridView ```Xml ``` ```java @BindingAdapter(value = {"columnText", "columnTextColor", "columnTextSize", "columnSort", "sortIcon", "columnKey"}, requireAll = false) public static void initHeader(View view, String columnText, int columnTextColor, int columnTextSize, boolean columnSort, int sortIcon, String columnKey); @BindingAdapter(value = {"columnVisibility"}, requireAll = false) public static void columnVisibility(View view, int visibility); void setDataSource(List data); void setDataTotal(int dataTotal); void setOnBindHolderListener(OnBindHolderListener listener); void setOnSwitchPageListener(OnSwitchPageListener listener); void setOnPageTurnListener(OnPageTurnListener onPageTurnListener); void setOnSortListener(OnSortListener onSortListener); ```