فهرست منبع

迁入ISCS首页部分代码

Frankensteinly 9 ماه پیش
والد
کامیت
fc47a31a5c

+ 4 - 0
app/src/main/AndroidManifest.xml

@@ -2,6 +2,10 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools">
 
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+
     <application
         android:name=".MyApplication"
         android:allowBackup="true"

+ 56 - 2
app/src/main/java/com/grkj/iscs_mc/view/activity/HomeActivity.kt

@@ -1,14 +1,68 @@
 package com.grkj.iscs_mc.view.activity
 
+import android.widget.ImageView
+import com.grkj.iscs_mc.R
 import com.grkj.iscs_mc.databinding.ActivityHomeBinding
-import com.grkj.iscs_mc.view.base.BaseActivity
+import com.grkj.iscs_mc.view.adapter.MenuAdapter
+import com.grkj.iscs_mc.view.base.BaseFragment
+import com.grkj.iscs_mc.view.base.BaseMvpActivity
+import com.grkj.iscs_mc.view.fragment.MaterialManagementFragment
+import com.grkj.iscs_mc.view.fragment.SettingFragment
+import com.grkj.iscs_mc.view.iview.IHomeView
+import com.grkj.iscs_mc.view.presenter.HomePresenter
+import com.zhy.adapter.recyclerview.CommonAdapter
+import com.zhy.adapter.recyclerview.base.ViewHolder
 
-class HomeActivity : BaseActivity<ActivityHomeBinding>() {
+/**
+ * 首页
+ */
+class HomeActivity : BaseMvpActivity<IHomeView, HomePresenter, ActivityHomeBinding>() {
+
+    private var mMenuList = mutableListOf<Menu>()
 
     override val viewBinding: ActivityHomeBinding
         get() = ActivityHomeBinding.inflate(layoutInflater)
 
     override fun initView() {
+        mMenuList.add(Menu(getString(R.string.material_management), R.mipmap.material_management, MaterialManagementFragment()))
+        mMenuList.add(Menu(getString(R.string.settings), R.mipmap.settings, SettingFragment()))
+
+        mBinding?.itemSetting?.ivIcon?.setImageResource(R.mipmap.settings)
+        mBinding?.itemSetting?.tvName?.text = getString(R.string.settings)
+        mBinding?.itemSetting?.root?.setOnClickListener {
+            mBinding?.vp?.currentItem = mMenuList.size - 1
+            mBinding?.itemSetting?.root?.setBackgroundColor(getColor(R.color.common_bg_white_30))
+            mBinding?.rvMenu?.adapter?.notifyDataSetChanged()
+        }
+        if (mMenuList.size == 1) {
+            mBinding?.itemSetting?.root?.setBackgroundColor(getColor(R.color.common_bg_white_30))
+        }
+
+        mBinding?.vp?.isUserInputEnabled = false
+        mBinding?.vp?.offscreenPageLimit = mMenuList.size
+        mBinding?.vp?.adapter = MenuAdapter(supportFragmentManager, lifecycle, mMenuList)
 
+        mBinding?.rvMenu?.adapter = object : CommonAdapter<Menu>(this, R.layout.item_rv_menu, mMenuList) {
+            override fun convert(holder: ViewHolder, data: Menu, position: Int) {
+                holder.setVisible(R.id.root, data.title != getString(R.string.settings))
+                holder.setText(R.id.tv_name, data.title)
+                holder.getView<ImageView>(R.id.iv_icon).setImageResource(data.icon!!)
+                holder.setOnClickListener(R.id.root) {
+                    mBinding?.itemSetting?.root?.setBackgroundColor(0)
+                    mBinding?.vp?.currentItem = position
+                    notifyDataSetChanged()
+                }
+                holder.setBackgroundColor(R.id.root,
+                    if (position == mBinding?.vp?.currentItem)
+                        getColor(R.color.common_bg_white_30)
+                    else 0)
+            }
+        }
     }
+
+    override fun initPresenter(): HomePresenter {
+        return HomePresenter()
+    }
+
+    data class Menu(val title: String? = null, val icon: Int? = null, val fragment: BaseFragment<*>)
 }

+ 25 - 0
app/src/main/java/com/grkj/iscs_mc/view/adapter/MenuAdapter.kt

@@ -0,0 +1,25 @@
+package com.grkj.iscs_mc.view.adapter
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentManager
+import androidx.lifecycle.Lifecycle
+import androidx.viewpager2.adapter.FragmentStateAdapter
+import com.grkj.iscs_mc.view.activity.HomeActivity.Menu
+
+/**
+ * 首页功能菜单适配器
+ */
+class MenuAdapter(
+    fragmentManager: FragmentManager,
+    lifecycle: Lifecycle,
+    private val fragmentList: MutableList<Menu>
+) : FragmentStateAdapter(fragmentManager, lifecycle) {
+
+    override fun getItemCount(): Int {
+        return fragmentList.size
+    }
+
+    override fun createFragment(position: Int): Fragment {
+        return fragmentList[position].fragment
+    }
+}

+ 6 - 0
app/src/main/java/com/grkj/iscs_mc/view/iview/IHomeView.kt

@@ -0,0 +1,6 @@
+package com.grkj.iscs_mc.view.iview
+
+import com.grkj.iscs_mc.view.base.IView
+
+interface IHomeView : IView {
+}

+ 7 - 0
app/src/main/java/com/grkj/iscs_mc/view/presenter/HomePresenter.kt

@@ -0,0 +1,7 @@
+package com.grkj.iscs_mc.view.presenter
+
+import com.grkj.iscs_mc.view.base.BasePresenter
+import com.grkj.iscs_mc.view.iview.IHomeView
+
+class HomePresenter : BasePresenter<IHomeView>() {
+}

+ 77 - 0
app/src/main/res/layout/activity_home.xml

@@ -1,9 +1,86 @@
 <?xml version="1.0" encoding="utf-8"?>
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
     android:id="@+id/main"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@mipmap/main_bg"
     tools:context=".view.activity.HomeActivity">
 
+    <RelativeLayout
+        android:id="@+id/rl_menu"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        android:padding="@dimen/menu_padding"
+        android:background="@color/home_menu_bg"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintHorizontal_weight="267"
+        app:layout_constraintLeft_toLeftOf="parent"
+        app:layout_constraintRight_toLeftOf="@id/rl_page"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:id="@+id/tv_app_title"
+            style="@style/CommonTextView"
+            android:layout_centerHorizontal="true"
+            android:text="@string/app_title"
+            android:textSize="@dimen/common_text_size_big"
+            android:textStyle="bold" />
+
+        <View
+            android:id="@+id/v_divider_title"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/divider_line_width"
+            android:layout_below="@id/tv_app_title"
+            android:layout_marginVertical="@dimen/divider_line_margin"
+            android:background="@color/white" />
+
+        <TextClock
+            android:id="@+id/tc_time"
+            style="@style/CommonTextView"
+            android:layout_alignParentBottom="true"
+            android:layout_centerHorizontal="true"
+            android:format12Hour="yyyy-MM-dd\nhh:mm"
+            android:format24Hour="yyyy-MM-dd\nhh:mm" />
+
+        <View
+            android:id="@+id/v_divider_time"
+            android:layout_width="match_parent"
+            android:layout_height="@dimen/divider_line_width"
+            android:layout_above="@id/tc_time"
+            android:layout_marginVertical="@dimen/divider_line_margin"
+            android:background="@color/white" />
+
+        <include
+            android:id="@+id/item_setting"
+            layout="@layout/item_rv_menu"
+            android:layout_width="@dimen/item_rv_menu_size"
+            android:layout_height="@dimen/item_rv_menu_size"
+            android:layout_above="@id/v_divider_time" />
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/rv_menu"
+            style="@style/CommonRecyclerView"
+            android:layout_above="@id/item_setting"
+            android:layout_below="@id/v_divider_title"
+            tools:listitem="@layout/item_rv_menu" />
+    </RelativeLayout>
+
+    <RelativeLayout
+        android:id="@+id/rl_page"
+        android:layout_width="0dp"
+        android:layout_height="0dp"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintHorizontal_weight="1653"
+        app:layout_constraintLeft_toRightOf="@id/rl_menu"
+        app:layout_constraintRight_toRightOf="parent"
+        app:layout_constraintTop_toTopOf="parent"
+        android:padding="@dimen/page_padding">
+
+        <androidx.viewpager2.widget.ViewPager2
+            android:id="@+id/vp"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+    </RelativeLayout>
 </androidx.constraintlayout.widget.ConstraintLayout>

+ 18 - 0
app/src/main/res/layout/item_rv_menu.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/root"
+    android:layout_width="@dimen/item_rv_menu_size"
+    android:layout_height="@dimen/item_rv_menu_size"
+    android:gravity="center"
+    android:orientation="vertical">
+
+    <ImageView
+        android:id="@+id/iv_icon"
+        android:layout_width="@dimen/item_rv_menu_icon_size"
+        android:layout_height="@dimen/item_rv_menu_icon_size" />
+
+    <TextView
+        android:id="@+id/tv_name"
+        style="@style/CommonTextView"
+        android:layout_marginTop="8dp" />
+</LinearLayout>

BIN
app/src/main/res/mipmap/material_management.png


BIN
app/src/main/res/mipmap/settings.png


+ 3 - 0
app/src/main/res/values/dimens.xml

@@ -32,4 +32,7 @@
     <dimen name="item_rv_login_height">130dp</dimen>
     <dimen name="item_rv_login_margin">7dp</dimen>
     <dimen name="item_rv_login_icon_size">40dp</dimen>
+
+    <dimen name="item_rv_menu_size">58dp</dimen>
+    <dimen name="item_rv_menu_icon_size">20dp</dimen>
 </resources>

+ 3 - 0
app/src/main/res/values/strings.xml

@@ -1,6 +1,8 @@
 <resources>
     <string name="app_name">ISCS_MC</string>
 
+    <string name="app_title">Mars\n物资管理</string>
+
     <string name="common_net_dis">请确认网络状态正常后重试!</string>
     <string name="common_net_download">请确认网络状态正常且下载地址无误后重试!</string>
     <string name="common_download_erro_notag">下载失败!请确认文件存储位置后重试</string>
@@ -20,4 +22,5 @@
     <string name="cancel">取消</string>
     <string name="please_login">请登录</string>
     <string name="logout">退出登录</string>
+    <string name="settings">设置</string>
 </resources>