首页 > 其他 > 详细

布局基础<kotlin>

时间:2020-02-03 10:52:08      阅读:107      评论:0      收藏:0      [点我收藏+]

<全屏>

技术分享图片

 

 <主界面>

底部导航,bottombar

->添加依赖 

implementation ‘com.roughike:bottom-bar:2.3.1‘

->主界面布局

<com.roughike.bottombar.BottomBar
        android:id="@+id/bottomBar"
        android:layout_width="match_parent"
        android:layout_height="60dp"
        android:layout_alignParentBottom="true"
        app:bb_tabXmlResource="@xml/bottombar_tabs" />

->创建布局文件xml/bottombar_tabs.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<tabs>
<tab
id="@+id/tab_home"
icon="@drawable/ic_home"
title="主页" />
<tab
id="@+id/tab_favorites"
icon="@drawable/ic_favorites"
title="收藏" />
<tab
id="@+id/tab_message"
icon="@drawable/ic_message"
title="消息" />
<tab
id="@+id/tab_my"
icon="@drawable/ic_my"
title="个人中心" />
</tabs>
</PreferenceScreen>

(PreferenceScreen提示已被弃用)

 

 ->设置点击监听,切换Fragment

1.创建BaseFragment基类

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

abstract class BaseFragment:Fragment() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        init()
    }

    open protected fun init() {
    }

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        return initView()
    }

    abstract fun initView(): View?

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        onListener()
    }

    open protected fun onListener() {
    }


}

 

2.创建四个Fragment类继承自BaseFragment,并配置布局文件

技术分享图片

 

import android.view.View
import com.vocus.playertest.R
import com.vocus.playertest.base.BaseFragment

class FavoritesFragment:BaseFragment() {
    override fun initView(): View? {
        return View.inflate(context,R.layout.fragment_home,null)
    }
}

3.创建FragmentUtil管理各个fragment

import com.vocus.playertest.R
import com.vocus.playertest.base.BaseFragment
import com.vocus.playertest.fragment.FavoritesFragment
import com.vocus.playertest.fragment.HomeFragment
import com.vocus.playertest.fragment.MessageFragment
import com.vocus.playertest.fragment.MyFragment

class FragmentUtil private constructor(){ //单例模式
    val homeFragment by lazy{ HomeFragment()}
    val favoritesFragment by lazy{ FavoritesFragment()}
    val messageFragment by lazy{ MessageFragment() }
    val myFragment by lazy{ MyFragment() }

    companion object{
        val fragmentUtil by lazy{
            FragmentUtil()
        }
    }

    fun getFragment(tabId:Int):BaseFragment?{
        when(tabId){
            R.id.tab_home->return homeFragment
            R.id.tab_favorites->return favoritesFragment
            R.id.tab_message->return messageFragment
            R.id.tab_my->return myFragment
        }
        return null
    }

}

4.设置监听

override fun setOnListener() {
        bottomBar.setOnTabSelectListener{
            val transaction=supportFragmentManager.beginTransaction()
            transaction.replace(R.id.container,FragmentUtil.fragmentUtil.getFragment(it)!!,it.toString())
            transaction.commit()
        }

顶部<Toolbar>

->activity_main.xml中

<include layout="@layout/toobar"/>

->添加布局文件toolbar.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="?attr/actionBarSize"
android:layout_width="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="@color/colorPrimary"
android:id="@+id/toolBar"
app:titleTextColor="#fff"></androidx.appcompat.widget.Toolbar>

->创建ToolbarMananger接口管理toolbar

 

1.添加设置按钮
2.设置按钮点击监听,跳转到设置页面
ToolbarMananger.kt
import android.content.Intent
import android.view.MenuItem
import androidx.appcompat.widget.Toolbar
import com.vocus.playertest.R
import com.vocus.playertest.ui.activity.SettingActivity


interface ToolbarMananger {
    val toolbar: Toolbar

    fun initMainToolbar() {
        toolbar.setTitle("一出好戏")
        toolbar.inflateMenu(R.menu.main)
        toolbar.setOnMenuItemClickListener(object :Toolbar.OnMenuItemClickListener{
            override fun onMenuItemClick(item: MenuItem?): Boolean {
                when(item?.itemId){
                    R.id.setting->toolbar.context.startActivity(Intent(toolbar.context, SettingActivity::class.java))
                }
                return true
            }
        })
    }
}

MainActivity.kt

class MainActivity : BaseActivity() ,ToolbarMananger{
    override val toolbar: Toolbar by lazy{
        find<Toolbar>(R.id.toolBar)
    }

    override fun getLayoutId(): Int {
        return R.layout.activity_main
    }

    override fun init() {
        initMainToolbar()
    }
}

menu/main.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/setting"
        android:icon="@drawable/menu_setting1"
        android:title="设置"
        app:showAsAction="always"/>
</menu>

3.设置界面布局

(1)添加toolbar

(2)添加fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
<include layout="@layout/toobar"/>
    <fragment
        android:id="@+id/settingFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.vocus.playertest.fragment.SettingFragment"/>
</LinearLayout>

->SettingFragment类

package com.vocus.playertest.fragment

import android.os.Bundle
import android.preference.Preference
import android.preference.PreferenceFragment
import android.preference.PreferenceScreen
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import com.vocus.playertest.R
import org.jetbrains.anko.toast

class SettingFragment :PreferenceFragment(){
    override fun onCreateView(
        inflater: LayoutInflater?,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        addPreferencesFromResource(R.xml.fragment_setting)
        return super.onCreateView(inflater, container, savedInstanceState)
    }

    override fun onPreferenceTreeClick(
        preferenceScreen: PreferenceScreen?,
        preference: Preference?
    ): Boolean {
        val key=preference?.key
        when(key){
            "about"->toast("点击了关于")
        }
        return true
    }
}

->xml/fragment_setting.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<Preference
    android:key="clear_cache"
    android:title="清除缓存"/>
    <SwitchPreference
        android:key="push"
        android:title="推送文章"/>
    <SwitchPreference
        android:key="no_wifi"
        android:title="非wifi环境加载图片"/>
    <Preference
        android:key="about"
        android:title="关于"/>
</PreferenceScreen>

->判断SwitchPreference是否选中,在SettingActivity.kt中

        val ps= PreferenceManager.getDefaultSharedPreferences(this)
        val push=ps.getBoolean("push",false)
        println("push=$push")

技术分享图片

 

 

 

 

 技术分享图片

 <一些特效>

图片轮播

 

 



 

布局基础<kotlin>

原文:https://www.cnblogs.com/vocus/p/12254437.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!