# renhuan_utils **Repository Path**: renhuan/renhuan_utils ## Basic Information - **Project Name**: renhuan_utils - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-12-21 - **Last Updated**: 2023-12-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 常用的自定义view和工具(持续增加) ## [同步码云gitee,点我直达](https://gitee.com/renhuan/renhuan_utils) ## [同步github,点我直达](https://github.com/renhuan/renhuan_utils) - ~~**App二维码下载**~~ ![下载二维码](/img/qr.jpg) - **导入** ```gradle allprojects { repositories { ... maven { url 'https://jitpack.io' } } } ``` ```css dependencies { implementation 'com.github.renhuan:renhuan_utils:1.0.1' } ``` 最新版本:![](https://jitpack.io/v/renhuan/renhuan_utils.svg) ## 自定义view - **EditTextWithClear**(带清除按钮的EditText,继承AppCompatEditText,如果什么都不设置,默认自带显示) ``` 清除按钮的图片 清除按钮的图片的宽度 清除按钮的图片高度 清除按钮的图片的颜色,可以着色 ``` ![效果图](/img/editTextWithClear.gif) - **StrokeTextView**(带描边的TextView,继承AppCompatTextView) ``` 描边的颜色 描边的宽度 ``` ![效果图](/img/storkTextView.jpg) - **PngImageStroke**(带描边的ImageView,继承View) ``` 描边的颜色 描边的宽度 图片的缩放,默认为1正常 图片路径 ``` ```xml ``` ![效果图](/img/imgStorke.jpg) - **TabLayout**(继承官方TabLayout,横向滑动栏,配合Viewpager,做出炫酷动画) 效果图 ```kotlin val viewPager = findViewById(R.id.vp) val tab = findViewById(R.id.tab) val tab1 = findViewById(R.id.tab1) val tab2 = findViewById(R.id.tab2) viewPager.adapter = MyFragmentPagerAdapter( supportFragmentManager, arrayListOf( DemoFragment.getInstance(), DemoFragment.getInstance(), DemoFragment.getInstance(), DemoFragment.getInstance(), DemoFragment.getInstance() ), arrayListOf("张三", "李四", "张无忌", "Java", "Android") ) //样式1 默认没有图片 tab.setupWithViewPager(viewPager) //样式2 加图片(所有tab都显示) tab1.setIcons( arrayListOf( R.mipmap.ic_launcher, R.drawable.ic_baseline_add_alert_24, R.mipmap.ic_launcher, R.drawable.ic_baseline_add_alert_24, R.mipmap.ic_launcher ), false ) tab1.setupWithViewPager(viewPager) //样式3 加图片(当前选中tab显示) tab2.setIcons( arrayListOf( R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.drawable.ic_baseline_add_alert_24, R.mipmap.ic_launcher, R.drawable.ic_baseline_add_alert_24, ), true ) tab2.setupWithViewPager(viewPager) ``` ```xml ``` - **圆角布局**(Android布局必备,[更多用法参考这里](https://github.com/JavaNoober/BackgroundLibrary)) - **阴影布局【MaskViewGroup】**(继承viewgroup) 效果图 ```xml ``` ```java 自定义属性介绍: containerShadowColor:阴影颜色 containerShadowRadius:阴影半径 containerCornerRadius:阴影圆角 containerDeltaLength:阴影到边框距离 deltaX:阴影X方向偏移 deltaY:阴影Y enable:是否显示阴影 ``` ## 工具类 - **DrawableTintHelper**(单个drawable动态着色,不影响其他地方的使用(Android 默认一处地方着色,等于所有地方修改) ```kotlin class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) findViewById(R.id.imageView).setImageDrawable( Ext.getDrawable(R.mipmap.ic_close)?.tintColor(Ext.getColor(R.color.red)) ) findViewById(R.id.imageView2).setImageDrawable( Ext.getDrawable(R.mipmap.ic_close)?.tintColor(Ext.getColor(R.color.purple_200)) ) } } ``` ![效果图](/img/tint.jpg) - **Ext(非常实用哦)**(静态方法和扩展函数) ```kotlin Ext.getHandler() //获取Handle示例 Ext.getHandler().postDelayeds(1000) {}//延迟1s 运行 (延时器) Ext.getHandler().postDelayeds(1000, 1000) { time, runnable -> } //延迟1s并每秒运行 (定时器) Ext.getContext() //获取全局context Ext.getString(R.string.app_name) //获取资源字符串 Ext.getColor(R.color.red) //获取资源颜色 Ext.getDimension(R.dimen.dp_10) //获取资源尺寸 Ext.getDrawable(R.mipmap.ic_close) //获取资源drawable Ext.onKeyDown(keyCode, event) //按两次返回桌面,重写MainActivity的onKeyDown(keyCode: Int, event: KeyEvent?)方法 返回 return Ext.onKeyDown(keyCode, event) "这是提示".toast() //toast view.setOnSafeClickListener{} //安全点击 防止多次点击 1s之内之内只能点击一次 textview.checkEmpty("") //判断TextView是否为空,用法:phone.checkEmpty("手机号不能为空") ?: return textview.text() //获取Textview的值 string.copy() //复制到剪切板 drawable.tintColor(color) // 给drawable着色,返回新的drawable view.setScale() //给所有的View设置触摸缩放效果,类似小米手机点击缩放效果,默认缩放是0.9 ``` - **MMKVOwner**(腾讯数据持久化,利用委托封装,替代SharedPreferences) ```kotlin //继承MMKVOwner,里面封装了委托的方法,所有的本地要存取的放这里 //注意变量名不要重复了,因为默认key为属性名 object MMKVRepository : MMKVOwner { var str by mmkvString("") var num by mmkvInt(0) var b by mmkvBool(false) ... } //调用的时候 class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //赋值 MMKVRepository.str = "张三" MMKVRepository.num = 100 MMKVRepository.b = false //取值 println("---------" + MMKVRepository.str) println("---------" + MMKVRepository.num) println("---------" + MMKVRepository.b) } } ``` - **ActivityMessenger**(代替startActivity,具有kt特性,方便好用,下面是模拟页面A -> 页面B最基本的用法,[更多用法参考这里](https://github.com/wuyr/ActivityMessenger)) ```kotlin class AActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //页面A需要跳转的时候调用 BActivity.startAction(this) //BActivity.startAction(this,"张三") } } class BActivity : AppCompatActivity() { //页面B定义方法 companion object { fun startAction(context: Context, value: String) { ActivityMessenger.startActivity(context) //ActivityMessenger.startActivity(context, "key" to value) } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //页面B取值 val value = intent.get("key") //value == "张三" } } ``` - **Xpopu各种弹窗**(Android布局必备,[更多用法参考这里](https://github.com/li-xiaojun/XPopup))