看过一本书,名字是《你只是看起来很努力》。个人感觉很不错!
每天学一点,时间久了总会进步的!
Kotlin系列
- 学习的步伐(六) Kotlin 学习总结:类的特性
- 学习的步伐(五) Kotlin 基础语法学习总结:语法
- 学习的步伐(四) Kotlin 基础语法学习总结:操作符
- 学习的步伐(二)Kotlin 实现Recyclerview列表
效果图
本文功能介绍
TabLayout+Viewpager+Fragment,屏蔽了viewpager的滑动效果。
- 自定义viewpager
/**
* Created by Administrator on 2017/6/25.
* 在布局中直接引用即可
*/
class KotlinNoScrollViewPager : ViewPager {
/**
* 控制viewpager 是否可以滑动
* */
private var noScroll = true
constructor(mCtx : Context ) : super(mCtx) {
}
constructor(mCtx : Context,att : AttributeSet ) : super(mCtx,att) {
}
fun setScroll(noScroll : Boolean){
this.noScroll=noScroll
}
override fun scrollTo(x: Int, y: Int) {
super.scrollTo(x, y)
}
override fun onTouchEvent(ev: MotionEvent?): Boolean {
if (noScroll)
return false
else
return super.onTouchEvent(ev)
}
override fun onInterceptTouchEvent(ev: MotionEvent?): Boolean {
if (noScroll)
return false
else
return super.onInterceptTouchEvent(ev)
}
override fun setCurrentItem(item: Int) {
super.setCurrentItem(item,false)//false 标识切花换的时候不需要时间
}
}
本文Kotlin基础介绍
Kotlin的配置什么的都不在说了,上面文章已说过!
本文用到的基础并不多,主要要逐步适应kotlin的编码方式。
现在感觉越来越爱Kotlin了,编写起来真的很爽。
- 数组arrayOf()
/**
*我们可以给库函数 arrayOf() 传递每一项的值来创建Array,arrayOf(1, 2, 3) 创建了一个[1, 2, 3] 这样的数组
*/
val image = arrayOf(R.mipmap.zhuye,R.mipmap.shangdian,R.mipmap.msg,R.mipmap.sd_ka)
-
listOf()
listOf()是使用ArrayList实现的,返回的list是只读的,其内存效率更高。在开发过程中,可以尽可能的多用只读List,可以在一定程度上提高内存效率。
val tab1:Tab1Fragment=Tab1Fragment()
val tab2:Tab2Fragment=Tab2Fragment()
val tab3:Tab3Fragment=Tab3Fragment()
val tab4:Tab4Fragment=Tab4Fragment()
var lsit =listOf<Fragment>(tab1,tab2,tab3,tab4)
实现流程
里面注释写的很详细了,就逐步分开介绍了
- MainActivity
class MainActivity : AppCompatActivity(),TabLayout.OnTabSelectedListener {
override fun onTabReselected(tab: TabLayout.Tab?) {
}
override fun onTabUnselected(tab: TabLayout.Tab?) {
}
override fun onTabSelected(tab: TabLayout.Tab?) {
viewpager.currentItem=tab!!.position
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
setTab()
setItem()
tab.addOnTabSelectedListener(this)
}
fun setTab(){
/**设置tab的模式*/
tab.tabMode=TabLayout.MODE_FIXED
/**
* 第一种:initdata()!!
* 第二种使用listof
*/
val tab1:Tab1Fragment=Tab1Fragment()
val tab2:Tab2Fragment=Tab2Fragment()
val tab3:Tab3Fragment=Tab3Fragment()
val tab4:Tab4Fragment=Tab4Fragment()
var lsit =listOf<Fragment>(tab1,tab2,tab3,tab4)
viewpager.adapter=KotlinPagerAdapter(lsit,supportFragmentManager)
//让tab和viewpager关联起来
tab.setupWithViewPager(viewpager)
}
/**
* 设置tabitem
* */
fun setItem() {
tab.getTabAt()?.customView=getTabView()
tab.getTabAt()?.customView=getTabView()
tab.getTabAt()?.customView=getTabView()
tab.getTabAt()?.customView=getTabView()
}
/**
* fragment 添加到集合中
* 使用listof 代替
* */
fun initdata() : ArrayList<Fragment> {
val mList = ArrayList<Fragment>()
val tab1:Tab1Fragment=Tab1Fragment()
val tab2:Tab2Fragment=Tab2Fragment()
val tab3:Tab3Fragment=Tab3Fragment()
val tab4:Tab4Fragment=Tab4Fragment()
var lsit =listOf<Fragment>(tab1,tab2,tab3,tab4)
mList.add(tab1)
mList.add(tab2)
mList.add(tab3)
mList.add(tab4)
return mList
}
fun getTabView(position: Int): View {
val view = LayoutInflater.from(this).inflate(R.layout.tab_item, null)
val iv_head = view.findViewById(R.id.tab_item_text) as TextView
val im = view.findViewById(R.id.image) as ImageView
/*
*我们可以给库函数 arrayOf() 传递每一项的值来创建Array,arrayOf(1, 2, 3) 创建了一个[1, 2, 3] 这样的数组
*/
val image = arrayOf(R.mipmap.zhuye,R.mipmap.shangdian,R.mipmap.msg,R.mipmap.sd_ka)
val list=listOf<String>("tab1","tab2","tab3","tab4")
iv_head.text=list[position]
im.imageResource=image[position]
/**
* 不建议使用这种方式 我刚开始用的是这种 用这种它显示的都是第四个字符串tab4
* */
// val asc = Array(4,{"tab1";"tab2";"tab3";"tab4"})
// iv_head.text=asc[position]
return view
}
}
- KotlinPagerAdapter
class KotlinPagerAdapter(var mList : List<Fragment>, fm: FragmentManager?) : FragmentStatePagerAdapter(fm) {
override fun getItem(position: Int): android.support.v4.app.Fragment {
return mList[position]
}
override fun getCount(): Int {
return mList.size
}
}
- fragment (这个就不贴了 自己创建几个就行了)
动态创建布局
kotlin的动态创建布局顺便提一下,我demo中fragment有简单的用到。本人还在学习中,哪位客观有动态创建布局的学习经验,或者博客地址,欢迎留言告知!再次感谢
/**
* Created by Administrator on 2017/6/25.
*/
class Tab1Fragment : Fragment() {
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
return xml()
}
/**
* 动态创建布局
* */
fun xml(): View {
var view = with(context) {
verticalLayout {
gravity = Gravity.CENTER_VERTICAL
button("Kotlin动态创建布局Tab1Fragment") {
//这是btn的名字
onClick { toast("哈哈 动态创建布局") }
}
}
}
return view
}
}
demo源码
欢迎吐槽!