模仿小红书,用kotlin写一个适用于安卓的EditView,并给出所需要的资源文件
时间: 2024-05-02 17:23:18 浏览: 225
很高兴能与您进行交流。关于您的问题,我可以提供以下答案:
首先,创建一个适用于安卓的EditView需要考虑一些关键因素,例如外观设计和功能。我建议您使用Kotlin编写自定义组件,以便可以更方便地扩展和修改它。
以下是一些必要的资源文件:
1. edit_text_bg.9.xml – 该文件设置EditView的背景颜色和边框线。
2. edit_text_selector.xml – 该文件定义了不同状态下EditView的背景色和边框线。
3. edit_text_cursor.xml – 该文件定义EditView中输入光标的外观。
4. attrs.xml – 该文件定义了自定义EditView的属性和样式。
下面是一个简短的代码示例,您可以尝试在此基础上进行更改和扩展:
```kotlin
class CustomEditText(context: Context, attrs: AttributeSet?) : androidx.appcompat.widget.AppCompatEditText(context, attrs) {
init {
initView()
}
private fun initView() {
setBackgroundResource(R.drawable.edit_text_bg)
setPadding(10, 10, 10, 10)
setTextColor(Color.parseColor("#333333"))
setTextSize(TypedValue.COMPLEX_UNIT_SP, 18f)
setCursorDrawableColor(Color.parseColor("#2E7D32"))
}
private fun setCursorDrawableColor(color: Int) {
try {
val fCursorDrawableRes = TextView::class.java.getDeclaredField("mCursorDrawableRes")
fCursorDrawableRes.isAccessible = true
val mCursorDrawableRes = fCursorDrawableRes.getInt(this)
val fEditor = TextView::class.java.getDeclaredField("mEditor")
fEditor.isAccessible = true
val editor = fEditor.get(this)
val clazz = editor.javaClass
val fCursorDrawables = clazz.getDeclaredField("mCursorDrawable")
fCursorDrawables.isAccessible = true
val drawables = arrayOfNulls<Drawable>(2)
drawables[0] = context.resources.getDrawable(mCursorDrawableRes, null).mutate()
drawables[1] = context.resources.getDrawable(mCursorDrawableRes, null).mutate()
drawables[0]?.setColorFilter(color, PorterDuff.Mode.SRC_IN)
drawables[1]?.setColorFilter(color, PorterDuff.Mode.SRC_IN)
fCursorDrawables.set(editor, drawables)
} catch (e: Exception) {
e.printStackTrace()
}
}
}
```
希望我的回答对您有所帮助。如果您有任何其他问题,请随时向我提出。
阅读全文