# 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/#com.gitee.gt50/GtUI)
[](https://android-arsenal.com/api?level=15)
[](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 extends VHolder> holder);
public SimpleAdapter(List data, @NonNull Class extends VHolder> holder);
public SimpleAdapter(Object obj, @NonNull Class extends VHolder> holder);
public SimpleAdapter(Object obj, List data, @NonNull Class extends VHolder> 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);
```