Kotlin开发Android App和Java的差异1----Kotlin中使用Navigation组件

个人淘宝店铺链接 有需要的伙伴点击这里

使用Kotlin开发Android App的最大特点就在于简化代码,除此之外,跟Java开发App还是有很多不一样的地方

1 布局

使用XML布局和Java开发完全一致

2 设置单击事件监听

如果按照Java的方式,就需要设置onClickListener,然后重写onClick方法,在onClick方法中执行点击的操作,而Kotlin,只需要一行代码 setOnClickListener{ },在花括号中执行单击事件即可

btn_login.setOnClickListener {
    //获取用户名和密码
    var username:String = et_username.text.toString()
    var password:String =  et_password.text.toString()
    
    if (username.equals("小明") && password.equals("123456")){

        Log.e("TAG","登录成功")
        Toast.makeText(this,"登录成功",Toast.LENGTH_SHORT).show()
    }
}

3 Toast

Toast的使用方式和Java基本一致,差别在于Java在单击事件中不能直接使用this,因为指向的是控件本身,但是Kotlin中,可以直接使用this

4 静态类和静态方法

在Java中静态类和静态方法,使用static修饰,在Kotlin中,通常使用object关键字

class Note{

   object StaticClass{

       var name:String? = null;
       var age:Int? = null;
   }
   companion object {

	    fun draw() {
	            
	            println("静态方法")
	        }
   }
}

使用object修饰的类是静态类,里面的 方法和变量都是静态的;companion object修饰的是伴生对象,类似于Java中的静态方法,在类中只能存在一个伴生对象

5 Kotlin中使用Navigation组件

使用方式和Java类似,具体的步骤为
(1)创建空白的Fragment
(2)创建Navigation xml文件,详情可查看之前的文章JectPack组件Navigation的用法
(3)在Activity中添加BottomNavigationView和FragmentContainerView

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bnv_nav"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:theme="@style/bottom_navigation_style"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"/>

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/fragmentContainerView"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:defaultNavHost="true"
    app:navGraph="@navigation/tal_app_navigation"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toTopOf="@id/bnv_nav"/>

(4)获取NavController的方式,Kotlin和Java是不同的,在Java中是通过Navigation.findNavController,而Kotlin则是直接在Activity或者View中findNavController,但是如果报出下面的错误,就不能使用这种方式

TestActivity@e738195 does not have a NavController set on 2131231139

解决方式

var navHostFragment =
            supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
var navController = navHostFragment.navController

(5)界面导航跳转

这一部分跟Java相比,差别还是挺大的,先放上代码

var navHostFragment =
            supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment
var navController = navHostFragment.navController

var appBarConfiguration = bnv_nav?.menu?.let { AppBarConfiguration(topLevelMenu = it) }

appBarConfiguration?.let { setupActionBarWithNavController(navController,appBarConfiguration) }

bnv_nav?.setupWithNavController(navController)

使用setupActionBarWithNavController和Java类似,但是不同界面之间导航,就需要使用BottomNavigationView的setupWithNavController来完成

6 设置底部Tab的切换颜色

bottom_navigation_style.xml

<style name="bottom_navigation_style" parent="Theme.AppCompat.Light">

    <item name="colorPrimary">@color/red</item>
    <item name="android:textColorSecondary">@color/blue</item>
</style>

在theme中,添加底部按钮的切换场景,其中
colorPrimary:是选中的颜色展示
android:textColorSecondary:是没有选中的颜色

app:itemIconTint="@color/bottom_navigation_selector"

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:color="@color/red" android:state_checked="true"/>
    <item android:color="@color/blue" android:state_checked="false"/>
</selector>

可以添加BottomNavigationView的theme和itemIconTint属性

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Awesome_lay

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值