diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sample.xml b/app/src/main/res/layout/fragment_sample.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_sample.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sample.xml b/app/src/main/res/layout/fragment_sample.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_sample.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_bottom_nav_menu.xml b/app/src/main/res/menu/main_bottom_nav_menu.xml new file mode 100644 index 0000000..55e9ba2 --- /dev/null +++ b/app/src/main/res/menu/main_bottom_nav_menu.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt new file mode 100644 index 0000000..4af3f8d --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/adapter/ViewPagerAdapter.kt @@ -0,0 +1,15 @@ +package com.casic.xz.meterage.adapter + +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter + +class ViewPagerAdapter(list: ArrayList, manager: FragmentManager) : + FragmentPagerAdapter(manager) { + + private var pages: List = list + + override fun getItem(position: Int) = pages[position] + + override fun getCount() = pages.size +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt new file mode 100644 index 0000000..aee50a8 --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/HomePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class HomePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_home + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt new file mode 100644 index 0000000..8d51c4a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/MinePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class MinePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_mine + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt new file mode 100644 index 0000000..f54f94a --- /dev/null +++ b/app/src/main/java/com/casic/xz/meterage/fragment/SamplePageFragment.kt @@ -0,0 +1,24 @@ +package com.casic.xz.meterage.fragment + +import com.casic.xz.meterage.R +import com.pengxh.kt.lite.base.KotlinBaseFragment + +class SamplePageFragment : KotlinBaseFragment(){ + override fun initData() { + + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.fragment_sample + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt index eb2bfd5..a9dc9b7 100644 --- a/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt +++ b/app/src/main/java/com/casic/xz/meterage/view/MainActivity.kt @@ -1,12 +1,104 @@ package com.casic.xz.meterage.view -import androidx.appcompat.app.AppCompatActivity -import android.os.Bundle +import android.view.KeyEvent +import android.view.MenuItem +import androidx.fragment.app.Fragment +import androidx.lifecycle.ViewModelProvider +import androidx.viewpager.widget.ViewPager import com.casic.xz.meterage.R +import com.casic.xz.meterage.adapter.ViewPagerAdapter +import com.casic.xz.meterage.fragment.HomePageFragment +import com.casic.xz.meterage.fragment.MinePageFragment +import com.casic.xz.meterage.fragment.SamplePageFragment +import com.casic.xz.meterage.vm.UserViewModel +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.convertColor +import com.pengxh.kt.lite.extensions.show +import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil +import kotlinx.android.synthetic.main.activity_main.* -class MainActivity : AppCompatActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_main) +class MainActivity : KotlinBaseActivity() { + + private var menuItem: MenuItem? = null + private var fragmentPages: ArrayList = ArrayList() + private var clickTime: Long = 0 + + init { + fragmentPages.add(HomePageFragment()) + fragmentPages.add(SamplePageFragment()) + fragmentPages.add(MinePageFragment()) + } + + override fun initData() { + val userViewModel = ViewModelProvider(this)[UserViewModel::class.java] + + bottomNavigation.itemIconTintList = null + bottomNavigation.setOnNavigationItemSelectedListener { menuItem -> + when (menuItem.itemId) { + R.id.nav_home -> { + mainViewPager.currentItem = 0 + } + R.id.nav_sample -> { + mainViewPager.currentItem = 1 + } + R.id.nav_mine -> { + mainViewPager.currentItem = 2 + } + } + false + } + mainViewPager.adapter = ViewPagerAdapter(fragmentPages, supportFragmentManager) + mainViewPager.offscreenPageLimit = fragmentPages.size //缓存页数 + mainViewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener { + override fun onPageScrollStateChanged(state: Int) { + + } + + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int + ) { + + } + + override fun onPageSelected(position: Int) { + if (menuItem != null) { + menuItem!!.isChecked = false + } else { + bottomNavigation.menu.getItem(0).isChecked = false + } + menuItem = bottomNavigation.menu.getItem(position) + menuItem!!.isChecked = true + } + }) + } + + override fun initEvent() { + + } + + override fun initLayoutView(): Int = R.layout.activity_main + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + ImmerseStatusBarUtil.setColor(this, R.color.themeColor.convertColor(this)) + } + + override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean { + return if (keyCode == KeyEvent.KEYCODE_BACK) { + if (System.currentTimeMillis() - clickTime > 2000) { + "再按一次退出应用".show(this) + clickTime = System.currentTimeMillis() + true + } else { + super.onKeyDown(keyCode, event) + } + } else super.onKeyDown(keyCode, event) } } \ No newline at end of file diff --git a/app/src/main/res/drawable/bottom_text_color.xml b/app/src/main/res/drawable/bottom_text_color.xml new file mode 100644 index 0000000..98c9731 --- /dev/null +++ b/app/src/main/res/drawable/bottom_text_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/home_selector.xml b/app/src/main/res/drawable/home_selector.xml new file mode 100644 index 0000000..7c8ec4f --- /dev/null +++ b/app/src/main/res/drawable/home_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..91c08f6 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_home_selected.xml b/app/src/main/res/drawable/ic_home_selected.xml new file mode 100644 index 0000000..d500f01 --- /dev/null +++ b/app/src/main/res/drawable/ic_home_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine.xml b/app/src/main/res/drawable/ic_mine.xml new file mode 100644 index 0000000..a592814 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_mine_selected.xml b/app/src/main/res/drawable/ic_mine_selected.xml new file mode 100644 index 0000000..f3b0d04 --- /dev/null +++ b/app/src/main/res/drawable/ic_mine_selected.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_sample.xml b/app/src/main/res/drawable/ic_sample.xml new file mode 100644 index 0000000..c5a4d5c --- /dev/null +++ b/app/src/main/res/drawable/ic_sample.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_sample_selected.xml b/app/src/main/res/drawable/ic_sample_selected.xml new file mode 100644 index 0000000..365b493 --- /dev/null +++ b/app/src/main/res/drawable/ic_sample_selected.xml @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/mine_selector.xml b/app/src/main/res/drawable/mine_selector.xml new file mode 100644 index 0000000..b9b0110 --- /dev/null +++ b/app/src/main/res/drawable/mine_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sample_selector.xml b/app/src/main/res/drawable/sample_selector.xml new file mode 100644 index 0000000..e9a47ef --- /dev/null +++ b/app/src/main/res/drawable/sample_selector.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0cb3f4a..73359e7 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,18 +1,26 @@ - + android:background="@color/white" + android:orientation="vertical"> - + + + - - \ No newline at end of file + android:background="@color/white" + app:itemIconTint="@drawable/bottom_text_color" + app:itemTextColor="@drawable/bottom_text_color" + app:labelVisibilityMode="labeled" + app:menu="@menu/main_bottom_nav_menu" /> + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_mine.xml b/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_sample.xml b/app/src/main/res/layout/fragment_sample.xml new file mode 100644 index 0000000..77d9ef6 --- /dev/null +++ b/app/src/main/res/layout/fragment_sample.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/main_bottom_nav_menu.xml b/app/src/main/res/menu/main_bottom_nav_menu.xml new file mode 100644 index 0000000..55e9ba2 --- /dev/null +++ b/app/src/main/res/menu/main_bottom_nav_menu.xml @@ -0,0 +1,29 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 4eb4d06..d188f0d 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -10,6 +10,7 @@ #3d7eff #803d7eff + #333333 #E6E6E6 #E4E4E4 \ No newline at end of file