石慧云 4 年之前
父節點
當前提交
5b5f560635

+ 4 - 0
app/build.gradle

@@ -115,4 +115,8 @@ dependencies {
     addComponent 'update'
     addComponent 'umeng'
 
+    // 底部菜单
+    implementation('com.flyco.tablayout:FlycoTabLayout_Lib:2.1.2@aar') {
+        exclude group: 'com.android.support', module: 'support-v4'
+    }
 }

+ 17 - 83
app/src/main/AndroidManifest.xml

@@ -40,89 +40,23 @@
             android:name="design_height_in_dp"
             android:value="667" />
 
-        <activity
-            android:name="com.quansu.heifengwuliu.activity.MainActivity"
-            android:configChanges="orientation|screenLayout|screenSize|smallestScreenSize"
-            android:launchMode="singleInstance"
-            android:theme="@style/AppTheme.Translucent.NoActionBar" >
-
-            <!--            <intent-filter >-->
-            <!--                <action android:name="android.intent.action.SEARCH" />-->
-
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
-            <!--            <intent-filter >-->
-            <!--                <action android:name="android.search.action.GLOBAL_SEARCH" />-->
-
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
-            <!--            <intent-filter >-->
-            <!--                <action android:name="android.intent.action.PROCESS_TEXT" />-->
-
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-
-            <!--                <data android:mimeType="text/plain" />-->
-            <!--            </intent-filter >-->
-            <!--            <intent-filter >-->
-            <!--                <action android:name="com.orekie.search.SCREEN_SEARCH" />-->
-
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
-            <!--            <intent-filter >-->
-            <!--                <action android:name="com.orekie.search.FIRST_TAB" />-->
-
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
 
-            <!--            <meta-data-->
-            <!--                android:name="com.android.systemui.action_assist_icon"-->
-            <!--                android:resource="@drawable/ic_search" />-->
-
-            <!--            <intent-filter >-->
-            <!--                <action android:name="android.intent.action.ASSIST" />-->
+        <activity android:name="com.quansu.heifengwuliu.activity.SettingsActivity" />
 
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
-            <!--            <intent-filter >-->
-            <!--                <action android:name="android.intent.action.VOICE_COMMAND" />-->
 
-            <!--                <category android:name="android.intent.category.DEFAULT" />-->
-            <!--            </intent-filter >-->
-        </activity >
+<!--                    android:theme="@style/AppTheme.Launcher"
+-->
+        <activity android:name=".activity.HomeActivity"
+            android:screenOrientation="portrait"
+            android:theme="@style/HomeTheme"
+            >
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
 
-        <activity android:name="com.quansu.heifengwuliu.activity.SettingsActivity" />
 
-        <receiver android:name="com.quansu.heifengwuliu.receiver.ActionBroadcastReceiver" />
-
-
-        <receiver android:name="com.quansu.heifengwuliu.receiver.WindowViewReceiver" >
-            <intent-filter >
-                <action android:name="com.ysnows.search_view" />
-                <action android:name="com.ysnows.notification_view" />
-            </intent-filter >
-        </receiver >
-        <receiver android:name="com.quansu.heifengwuliu.receiver.FuncReceiver" >
-            <intent-filter >
-                <action android:name="com.ysnows.torch" />
-                <action android:name="com.ysnows.music" />
-            </intent-filter >
-        </receiver >
-
-        <service android:name="com.quansu.heifengwuliu.receiver.ClipBoardListenService" />
-        <service
-            android:name="com.quansu.heifengwuliu.receiver.AssistantService"
-            android:label="@string/accessibility_service_label"
-            android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" >
-            <intent-filter >
-                <action android:name="android.accessibilityservice.AccessibilityService" />
-            </intent-filter >
-
-            <meta-data
-                android:name="android.accessibilityservice"
-                android:resource="@xml/accessibility_service_config" />
-        </service >
-
-        <activity android:name="com.quansu.heifengwuliu.activity.CheckPermissionsActivity" />
         <activity android:name="com.quansu.heifengwuliu.activity.TodosActivity" />
 
         <activity android:name="com.quansu.heifengwuliu.activity.LoginActivity" />
@@ -130,10 +64,10 @@
         <activity
             android:name="com.quansu.heifengwuliu.activity.PrivateCenterActivity"
             android:launchMode="singleTask" >
-            <intent-filter >
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.LAUNCHER" />
-            </intent-filter >
+<!--            <intent-filter >-->
+<!--                <action android:name="android.intent.action.MAIN" />-->
+<!--                <category android:name="android.intent.category.LAUNCHER" />-->
+<!--            </intent-filter >-->
         </activity >
         <activity android:name="com.quansu.heifengwuliu.activity.AboutActivity" />
         <activity android:name="com.quansu.heifengwuliu.activity.WebViewActivity" />
@@ -143,4 +77,4 @@
 
     </application >
 
-</manifest >
+</manifest >

+ 102 - 0
app/src/main/java/com/quansu/heifengwuliu/activity/HomeActivity.kt

@@ -1,10 +1,20 @@
 package com.quansu.heifengwuliu.activity
 
 import android.os.Bundle
+import androidx.fragment.app.FragmentTransaction
+import com.flyco.tablayout.listener.CustomTabEntity
+import com.flyco.tablayout.listener.OnTabSelectListener
+import com.quansu.heifengwuliu.R
 import com.quansu.heifengwuliu.base.MBActivity
 import com.quansu.heifengwuliu.databinding.ActivityHomeBinding
+import com.quansu.heifengwuliu.fragment.IndexFragment
+import com.quansu.heifengwuliu.fragment.MineFragment
+import com.quansu.heifengwuliu.fragment.WayBillFragment
+import com.quansu.heifengwuliu.model.bean.TabEntity
 import com.ysnows.base.base.BRepository
 import com.ysnows.base.base.BViewModel
+import kotlinx.android.synthetic.main.activity_home.*
+import java.util.ArrayList
 
 /**
  * 首页
@@ -13,12 +23,104 @@ import com.ysnows.base.base.BViewModel
  */
 class HomeActivity : MBActivity<BViewModel<BRepository>, ActivityHomeBinding>() {
 
+    private var mTitles = emptyArray<String>()
+    // 未被选中的图标
+    private val mIconUnSelectIds = intArrayOf(R.drawable.ic_mine_normal, R.drawable.ic_mine_normal,R.drawable.ic_mine_normal)//normal
+    // 被选中的图标
+    private val mIconSelectIds = intArrayOf(R.drawable.ic_mine_selected,R.drawable.ic_mine_selected, R.drawable.ic_mine_selected)//selected
+    private val mTabEntities = ArrayList<CustomTabEntity>()
+    private var mHomeFragment: IndexFragment? = null
+    private var mWayBillFragment: WayBillFragment?=null
+    private var mMineFragment: MineFragment? = null
+    //默认为0
+    private var mIndex = 0
+
     override fun binding(): ActivityHomeBinding {
         return ActivityHomeBinding.inflate(layoutInflater)
 
     }
 
     override fun initCreate(savedInstanceState: Bundle?) {
+        if (savedInstanceState != null) {
+            mIndex = savedInstanceState.getInt("currTabIndex")
+        }
         super.initCreate(savedInstanceState)
+        mTitles = arrayOf(getString(R.string.home),getString(R.string.waybill), getString(R.string.my))
+        initTab()
+        tab_layout.currentTab = mIndex
+        switchFragment(mIndex)
+    }
+
+    private fun initTab() {
+        (0 until mTitles.size)
+                .mapTo(mTabEntities) { TabEntity(mTitles[it], mIconSelectIds[it], mIconUnSelectIds[it]) }
+        //为Tab赋值
+        tab_layout.setTabData(mTabEntities)
+        tab_layout.setOnTabSelectListener(object : OnTabSelectListener {
+            override fun onTabSelect(position: Int) {
+                //切换Fragment
+                switchFragment(position)
+            }
+
+            override fun onTabReselect(position: Int) {
+            }
+        })
+    }
+
+    /**
+     * 切换Fragment
+     * @param position 下标
+     */
+    private fun switchFragment(position: Int) {
+        val transaction = supportFragmentManager.beginTransaction()
+        hideFragments(transaction)
+        when (position) {
+            0 // 货源
+            -> mHomeFragment?.let {
+                transaction.show(it)
+            } ?: IndexFragment().let {
+                mHomeFragment = it
+                transaction.add(R.id.fl_container, it, "home")
+            }
+
+            1 //我的运单
+            -> mWayBillFragment?.let {
+                transaction.show(it)
+            } ?: WayBillFragment().let {
+                mWayBillFragment = it
+                transaction.add(R.id.fl_container, it, "mine")
+            }
+
+            2 //个人中心
+            -> mMineFragment?.let {
+                transaction.show(it)
+            } ?: MineFragment().let {
+                mMineFragment = it
+                transaction.add(R.id.fl_container, it, "mine")
+            }
+            else -> {
+
+            }
+        }
+        mIndex = position
+        tab_layout.currentTab = mIndex
+        transaction.commitAllowingStateLoss()
+    }
+
+
+    /**
+     * 隐藏所有的Fragment
+     * @param transaction transaction
+     */
+    private fun hideFragments(transaction: FragmentTransaction) {
+        mHomeFragment?.let { transaction.hide(it) }
+        mWayBillFragment?.let { transaction.hide(it) }
+        mMineFragment?.let { transaction.hide(it) }
     }
+
+
+    override fun title(): String? {
+        return null
+    }
+
 }

+ 0 - 34
app/src/main/java/com/quansu/heifengwuliu/activity/MainActivity.kt

@@ -1,34 +0,0 @@
-package com.quansu.heifengwuliu.activity
-
-import android.os.Bundle
-import com.quansu.heifengwuliu.base.MBActivity
-import com.quansu.heifengwuliu.databinding.ActivitySearchBinding
-import com.quansu.heifengwuliu.repository.SearchRepository
-import com.quansu.heifengwuliu.vmodel.MainVModel
-import com.ysnows.base.base.BRepository
-
-
-class MainActivity : MBActivity<MainVModel, ActivitySearchBinding>() {
-
-    override val isRxbus: Boolean = true
-    override fun title(): String? = null
-
-    override fun initCreate(savedInstanceState: Bundle?) {
-        super.initCreate(savedInstanceState)
-
-    }
-
-
-    override fun binding(): ActivitySearchBinding = ActivitySearchBinding.inflate(layoutInflater)
-    override fun transluent(): Boolean = false
-
-    override fun createRepository(): BRepository {
-        return SearchRepository();
-    }
-
-
-    override fun vmClass(): Class<MainVModel> {
-        return MainVModel::class.java
-    }
-
-}

+ 26 - 0
app/src/main/java/com/quansu/heifengwuliu/fragment/IndexFragment.kt

@@ -0,0 +1,26 @@
+package com.quansu.heifengwuliu.fragment
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.quansu.heifengwuliu.base.MBFragment
+import com.quansu.heifengwuliu.databinding.FragmentIndexBinding
+import com.ysnows.base.base.BRepository
+import com.ysnows.base.base.BViewModel
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/9
+ */
+class IndexFragment  : MBFragment<BViewModel<BRepository>, FragmentIndexBinding>(){
+
+
+    override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentIndexBinding {
+        return FragmentIndexBinding.inflate(layoutInflater)
+    }
+
+    override fun title(): String? {
+        return null
+    }
+
+}

+ 26 - 0
app/src/main/java/com/quansu/heifengwuliu/fragment/MineFragment.kt

@@ -0,0 +1,26 @@
+package com.quansu.heifengwuliu.fragment
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.quansu.heifengwuliu.base.MBFragment
+import com.quansu.heifengwuliu.databinding.FragmentMineBinding
+import com.ysnows.base.base.BRepository
+import com.ysnows.base.base.BViewModel
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/9
+ */
+class MineFragment  : MBFragment<BViewModel<BRepository>, FragmentMineBinding>(){
+
+
+    override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentMineBinding {
+        return FragmentMineBinding.inflate(layoutInflater)
+    }
+
+
+    override fun title(): String? {
+        return null
+    }
+
+}

+ 27 - 0
app/src/main/java/com/quansu/heifengwuliu/fragment/WayBillFragment.kt

@@ -0,0 +1,27 @@
+package com.quansu.heifengwuliu.fragment
+
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import com.quansu.heifengwuliu.base.MBFragment
+import com.quansu.heifengwuliu.databinding.FragmentMineBinding
+import com.quansu.heifengwuliu.databinding.FragmentWaybillBinding
+import com.ysnows.base.base.BRepository
+import com.ysnows.base.base.BViewModel
+
+/**
+ *Created by shihuiyun
+ *on 2020/9/9
+ */
+class WayBillFragment  : MBFragment<BViewModel<BRepository>, FragmentWaybillBinding>(){
+
+
+    override fun binding(inflater: LayoutInflater, container: ViewGroup?): FragmentWaybillBinding {
+        return FragmentWaybillBinding.inflate(layoutInflater)
+    }
+
+
+    override fun title(): String? {
+        return null
+    }
+
+}

+ 23 - 0
app/src/main/java/com/quansu/heifengwuliu/model/bean/TabEntity.kt

@@ -0,0 +1,23 @@
+package com.quansu.heifengwuliu.model.bean
+
+import com.flyco.tablayout.listener.CustomTabEntity
+
+
+
+/**
+ * Created by xuhao on 2017/11/8.
+ */
+class TabEntity(var title: String, private var selectedIcon: Int, private var unSelectedIcon: Int) : CustomTabEntity {
+
+    override fun getTabTitle(): String {
+        return title
+    }
+
+    override fun getTabSelectedIcon(): Int {
+        return selectedIcon
+    }
+
+    override fun getTabUnselectedIcon(): Int {
+        return unSelectedIcon
+    }
+}

+ 3 - 3
app/src/main/java/com/quansu/heifengwuliu/widget/WidgetGuide.kt

@@ -10,7 +10,7 @@ import androidx.annotation.DrawableRes
 import androidx.databinding.DataBindingUtil
 import com.qmuiteam.qmui.kotlin.onClick
 import com.quansu.heifengwuliu.R
-import com.quansu.heifengwuliu.activity.MainActivity
+import com.quansu.heifengwuliu.activity.HomeActivity
 import com.quansu.heifengwuliu.config.ConfigMMKV
 import com.quansu.heifengwuliu.databinding.WidgetGuideBinding
 import com.ysnows.base.utils.MMKVManager
@@ -37,7 +37,7 @@ open class WidgetGuide constructor(context: Context, attrs: AttributeSet? = null
             binding.btnGo.onClick {
 
                 MMKVManager.instance().encode(ConfigMMKV.FIRST_OPEN, false)
-                UiSwitch.single(context, MainActivity::class.java)
+                UiSwitch.single(context, HomeActivity::class.java)
 
                 (context as Activity).finish()
             }
@@ -50,4 +50,4 @@ open class WidgetGuide constructor(context: Context, attrs: AttributeSet? = null
         initView(context, attrs, defStyleAttr)
         listeners()
     }
-}
+}

二進制
app/src/main/res/drawable-xxhdpi/ic_mine_normal.webp


二進制
app/src/main/res/drawable-xxhdpi/ic_mine_selected.webp


+ 31 - 5
app/src/main/res/layout/activity_home.xml

@@ -5,10 +5,36 @@
 
     </data >
 
-    <com.qmuiteam.qmui.widget.QMUIViewPager
+    <RelativeLayout
         android:layout_width="match_parent"
-        android:background="@color/black"
-        android:layout_height="match_parent" >
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        android:layout_height="match_parent">
+        <FrameLayout
+            android:id="@+id/fl_container"
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" />
+        <View
+            android:layout_width="match_parent"
+            android:layout_height="0.5dp"
+            android:layout_above="@+id/tab_layout"
+            android:background="@color/color_gray" />
 
-    </com.qmuiteam.qmui.widget.QMUIViewPager >
-</layout >
+
+        <com.flyco.tablayout.CommonTabLayout
+            android:id="@+id/tab_layout"
+            android:layout_width="match_parent"
+            android:layout_height="50dp"
+            android:layout_alignParentBottom="true"
+            android:background="@color/color_translucent"
+            app:tl_divider_color="@color/color_black"
+            app:tl_iconHeight="23dp"
+            app:tl_iconWidth="23dp"
+            app:tl_indicator_color="@color/colorPrimary"
+            app:tl_indicator_height="0dp"
+            app:tl_textSelectColor="@color/color_black"
+            app:tl_textUnselectColor="@color/color_gray"
+            app:tl_textsize="10sp"
+            app:tl_underline_color="#DDDDDD"
+            app:tl_underline_height="1dp" />
+    </RelativeLayout>
+</layout >

+ 6 - 7
app/src/main/res/layout/activity_search.xml → app/src/main/res/layout/fragment_index.xml

@@ -1,17 +1,16 @@
 <?xml version="1.0" encoding="utf-8"?>
-<layout xmlns:android="http://schemas.android.com/apk/res/android" >
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto" >
 
     <data >
 
-        <variable
-            name="vm"
-            type="com.quansu.heifengwuliu.vmodel.MainVModel" />
     </data >
 
-    <FrameLayout
+    <androidx.constraintlayout.widget.ConstraintLayout
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:orientation="vertical" >
 
-    </FrameLayout >
-</layout >
+
+    </androidx.constraintlayout.widget.ConstraintLayout >
+</layout >

+ 16 - 0
app/src/main/res/layout/fragment_mine.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto" >
+
+    <data >
+
+    </data >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" >
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout >
+</layout >

+ 16 - 0
app/src/main/res/layout/fragment_waybill.xml

@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto" >
+
+    <data >
+
+    </data >
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical" >
+
+
+    </androidx.constraintlayout.widget.ConstraintLayout >
+</layout >

+ 6 - 0
app/src/main/res/values/colors.xml

@@ -205,4 +205,10 @@
     <color name="color_home" >#54A7FE</color >
     <color name="alipay_color" >#1296db</color >
 
+<!--    -->
+    <color name="color_gray">#9a9a9a</color>
+    <color name="color_translucent">#00000000</color>
+    <color name="color_black">#000000</color>
+
+
 </resources >

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

@@ -398,5 +398,9 @@ Api 已达到使用限制
     <string name="buy_vip_success" >购买会员成功</string >
     <string name="developing" >此功能正在开放中...</string >
     <string name="go_go_go" >立即进入</string >
+<!--    -->
+    <string name="home">货源</string>
+    <string name="waybill">我的运单</string>
+    <string name="my">个人中心</string>
 
 </resources >

+ 9 - 1
app/src/main/res/values/theme.xml

@@ -99,6 +99,14 @@
         <item name="android:windowBackground" >@drawable/launcher_bg</item >
     </style >
 
+    <style name="HomeTheme" parent="AppTheme" >
+        <!-- Customize your theme here. -->
+        <item name="android:windowFullscreen" >false</item >
+        <item name="android:windowIsTranslucent" >true</item >
+    </style >
+
+
+
     <!-- blue skin -->
     <style name="app_skin_blue" parent="AppTheme" />
 
@@ -252,4 +260,4 @@
         <item name="app_skin_progress_bar_progress_color" >@color/qmui_config_color_gray_1</item >
     </style >
 
-</resources >
+</resources >

+ 1 - 0
base/build.gradle

@@ -42,4 +42,5 @@ android {
 dependencies {
     api fileTree(include: ['*.jar'], dir: 'libs')
     implementation 'com.billy.android:cc:2.1.5'
+
 }

+ 8 - 2
base/src/main/java/com/ysnows/base/base/BActivity.kt

@@ -1,6 +1,7 @@
 package com.ysnows.base.base
 
 import android.content.Context
+import android.graphics.Color
 import android.os.Bundle
 import android.text.TextUtils
 import android.view.View
@@ -16,6 +17,7 @@ import androidx.constraintlayout.widget.ConstraintSet
 import androidx.databinding.ViewDataBinding
 import androidx.lifecycle.ViewModelProvider
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+import com.githang.statusbar.StatusBarCompat
 import com.hwangjr.rxbus.RxBus
 import com.kingja.loadsir.callback.Callback.OnReloadListener
 import com.kingja.loadsir.core.LoadService
@@ -102,6 +104,9 @@ abstract class BActivity<VM : BViewModel<*>, B : ViewDataBinding> : RxAppCompatA
         }
 
         setContentView(rootView)
+        //手机标题栏字体颜色
+        StatusBarCompat.setStatusBarColor(this, resources.getColor(R.color.white))
+
         setStatusBar()
         register()
         loadService = if (contentView != null) {
@@ -128,7 +133,8 @@ abstract class BActivity<VM : BViewModel<*>, B : ViewDataBinding> : RxAppCompatA
     override fun setStatusBar() = if (transluent()) {
         QMUIStatusBarHelper.translucent(this)
     } else {
-        StatusBarUtil.setColor(this, resources.getColor(R.color.colorPrimary), 1)
+        StatusBarUtil.setColor(this, resources.getColor(R.color.white), 1)
+
     }
 
     override fun initView(view: View?) {
@@ -350,4 +356,4 @@ abstract class BActivity<VM : BViewModel<*>, B : ViewDataBinding> : RxAppCompatA
         const val TO_LOGIN = 1
     }
 
-}
+}

+ 3 - 0
common-build.gradle

@@ -59,6 +59,9 @@ dependencies {
     implementation 'com.sagar:coroutinespermission:2.0.2'
     implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
 
+    implementation 'com.githang:status-bar-compat:0.7'
+
+
 
     //普通版本
 //    implementation 'cn.yc:WebViewLib:1.2.4'