Android自定义view实现标签栏功能(只支持固定两个标签)
时间:2022-07-27
本文章向大家介绍Android自定义view实现标签栏功能(只支持固定两个标签),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
实现效果图
主要代码
完整源代码
class TabView(context: Context, attributeSet: AttributeSet?) : LinearLayout(context, attributeSet) {
private lateinit var firstTab: View
private lateinit var secondTab: View
private val firstTabIndex = 0
private val secondTabIndex = 1
private var selectedTab = firstTabIndex
private val textSize = 20f
private val bottomSplitColor = "#FA871E"
private val centerSplitColor = "#666666"
private val bottomSplitWidth = 50
private val bottomSplitHeight = 4
private val centerSplitWidth = 1
private val centerSplitHeight = 40
private lateinit var mOnSwitchListener: OnSwitchListener
fun initTabs(
firstTabText: String,
secondTabText: String,
selectedIndex: Int,
onSwitchListener: OnSwitchListener
) {
mOnSwitchListener = onSwitchListener
setOrientation()
firstTab = addTab(firstTabText)
addCenterSplit()
secondTab = addTab(secondTabText)
selectTab(selectedIndex)
setOnClickListener { switchTab() }
}
interface OnSwitchListener {
fun onSwitched(selectedIndex: Int)
}
private fun selectTab(tabIndex: Int) {
if (tabIndex == firstTabIndex) {
firstTab.visibility = View.VISIBLE
secondTab.visibility = View.INVISIBLE
} else {
firstTab.visibility = View.INVISIBLE
secondTab.visibility = View.VISIBLE
}
selectedTab = tabIndex
}
private fun switchTab() {
if (selectedTab == firstTabIndex) {
selectTab(secondTabIndex)
} else {
selectTab(firstTabIndex)
}
mOnSwitchListener.onSwitched(selectedTab)
}
private fun setOrientation() {
orientation = HORIZONTAL
}
private fun getBottomSplitView(): View {
val view = View(context)
view.setBackgroundColor(Color.parseColor(bottomSplitColor))
return view
}
private fun getBottomSplitLayoutParams(): LayoutParams {
val layoutParams = LayoutParams(bottomSplitWidth, bottomSplitHeight)
layoutParams.setMargins(3, 3, 3, 3)
layoutParams.gravity = Gravity.CENTER_HORIZONTAL
return layoutParams
}
private fun addCenterSplit() {
val view = View(context)
view.setBackgroundColor(Color.parseColor(centerSplitColor))
addView(view, getCenterSplitLayoutParams())
}
private fun getCenterSplitLayoutParams(): LayoutParams {
val layoutParams = LayoutParams(centerSplitWidth, centerSplitHeight)
layoutParams.setMargins(3, 0, 3, 0)
layoutParams.gravity = Gravity.CENTER_VERTICAL
return layoutParams
}
private fun addTab(text: String): View {
var linearLayout = LinearLayout(context)
linearLayout.orientation = VERTICAL
val textView = getTextView(text)
linearLayout.addView(
textView,
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
)
val splitView = getBottomSplitView()
linearLayout.addView(splitView, getBottomSplitLayoutParams())
addView(linearLayout, LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT))
return splitView
}
private fun getTextView(text: String): TextView {
val textView = TextView(context)
textView.text = text
textView.setPadding(10, 10, 10, 10)
textView.textSize = textSize
return textView
}
}
https://gitee.com/cxyzy1/custTabView
总结
到此这篇关于Android自定义view实现标签栏功能(只支持固定两个标签)的文章就介绍到这了,更多相关android自定义view标签栏内容请搜索ZaLou.Cn以前的文章或继续浏览下面的相关文章希望大家以后多多支持ZaLou.Cn!
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 《秋风日常第二期》一个快速找出待SEO图片的技巧
- 《模块化系列》snowpack,提高10倍打包速度。
- 《秋风日常第三期》11个前端开发者必备的网站
- 专为程序员定制的垃圾清理工具(Node Cli实现)
- CodePen vue SFC 、flutter 在线玩耍来袭
- [重拾CSS]一道面试题来看伪元素、包含块和高度坍塌
- webpack 拍了拍你,给了你一份图解指南(模块化部分)
- 深入探究Immutable.js的实现机制(一)
- 深入探究immutable.js的实现机制(二)
- ES6 Promise 的最佳实践
- 「 Map最佳实践」什么时候适合使用 Map 而不是 Object
- ES2017 异步函数的最佳实践(`async` /`await`)
- React Hooks中这样写HTTP请求可以避免内存泄漏
- 用了这 7 个 VS Code 插件,想写一辈子代码
- 听说你还不知道Promise的allSettled()和all()的区别?