This commit is contained in:
2026-04-28 14:11:48 +08:00
parent 805c9ef068
commit 827d85724e
8 changed files with 124 additions and 18 deletions

View File

@@ -1,12 +1,17 @@
package com.example.defenseapplication.home package com.example.defenseapplication.home
import android.graphics.Color
import android.graphics.Rect
import android.graphics.drawable.GradientDrawable
import android.os.Bundle import android.os.Bundle
import android.util.TypedValue
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.defenseapplication.adapter.DeviceAdapter import com.example.defenseapplication.adapter.DeviceAdapter
import com.example.defenseapplication.adapter.DeviceUi import com.example.defenseapplication.adapter.DeviceUi
import com.example.defenseapplication.adapter.FamilyAdapter import com.example.defenseapplication.adapter.FamilyAdapter
@@ -49,6 +54,17 @@ class HomeMenuFragment : Fragment() {
return binding.root return binding.root
} }
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// 为 LinearLayout 设置渐变背景
setGradientBackground(
view = binding.gradientLayout,
startColor = Color.parseColor("#EBDCED"),
endColor = Color.parseColor("#CAF4FF")
)
}
private fun initView() { private fun initView() {
binding.rvFamilyList.layoutManager = LinearLayoutManager(requireContext()) binding.rvFamilyList.layoutManager = LinearLayoutManager(requireContext())
binding.rvFamilyList.adapter = familyAdapter binding.rvFamilyList.adapter = familyAdapter
@@ -56,6 +72,11 @@ class HomeMenuFragment : Fragment() {
binding.rvDeviceList.layoutManager = GridLayoutManager(requireContext(), 2) binding.rvDeviceList.layoutManager = GridLayoutManager(requireContext(), 2)
binding.rvDeviceList.adapter = deviceAdapter binding.rvDeviceList.adapter = deviceAdapter
if (binding.rvDeviceList.itemDecorationCount == 0) {
binding.rvDeviceList.addItemDecoration(
GridHorizontalSpaceItemDecoration(horizontalSpace = dpToPx(8))
)
}
updateDeviceList() updateDeviceList()
binding.tvCurrentFamily.text = currentFamily binding.tvCurrentFamily.text = currentFamily
@@ -94,6 +115,45 @@ class HomeMenuFragment : Fragment() {
deviceAdapter.submitList(familyDeviceMap[currentFamily].orEmpty()) deviceAdapter.submitList(familyDeviceMap[currentFamily].orEmpty())
} }
private fun dpToPx(dp: Int): Int {
return TypedValue.applyDimension(
TypedValue.COMPLEX_UNIT_DIP,
dp.toFloat(),
resources.displayMetrics
).toInt()
}
private class GridHorizontalSpaceItemDecoration(
private val horizontalSpace: Int
) : RecyclerView.ItemDecoration() {
override fun getItemOffsets(
outRect: Rect,
view: View,
parent: RecyclerView,
state: RecyclerView.State
) {
val position = parent.getChildAdapterPosition(view)
if (position == RecyclerView.NO_POSITION) return
if (position % 2 == 0) {
outRect.right = horizontalSpace / 2
} else {
outRect.left = horizontalSpace / 2
}
}
}
private fun setGradientBackground(
view: View,
startColor: Int,
endColor: Int,
orientation: GradientDrawable.Orientation = GradientDrawable.Orientation.TL_BR
) {
val gradientDrawable = GradientDrawable(orientation, intArrayOf(startColor, endColor))
gradientDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
view.background = gradientDrawable
}
override fun onDestroyView() { override fun onDestroyView() {
super.onDestroyView() super.onDestroyView()
binding.rvFamilyList.adapter = null binding.rvFamilyList.adapter = null

View File

@@ -1,5 +1,7 @@
package com.example.defenseapplication.login package com.example.defenseapplication.login
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.text.InputType import android.text.InputType
@@ -32,7 +34,10 @@ class ForgetPasswordActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = ForgetPasswordActivityBinding.inflate(layoutInflater) binding = ForgetPasswordActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
// 设置渐变背景
val startColor = Color.parseColor("#CBEBFA")
val endColor = Color.parseColor("#FFF2EF")
setGradientBackground(binding.main, startColor, endColor)
setupClickListeners() setupClickListeners()
} }
@@ -168,6 +173,16 @@ class ForgetPasswordActivity : AppCompatActivity() {
} }
private fun setGradientBackground(
view: android.view.View,
startColor: Int,
endColor: Int,
orientation: GradientDrawable.Orientation = GradientDrawable.Orientation.TL_BR
) {
val gradientDrawable = GradientDrawable(orientation, intArrayOf(startColor, endColor))
gradientDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
view.background = gradientDrawable
}
override fun onDestroy() { override fun onDestroy() {
super.onDestroy() super.onDestroy()

View File

@@ -1,5 +1,7 @@
package com.example.defenseapplication.login package com.example.defenseapplication.login
import android.content.Intent import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import com.example.defenseapplication.R import com.example.defenseapplication.R
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
@@ -22,6 +24,11 @@ class LoginActivity : AppCompatActivity() {
binding = ActivityLoginBinding.inflate(layoutInflater) binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
// 设置渐变背景
val startColor = Color.parseColor("#CBEBFA")
val endColor = Color.parseColor("#FFF2EF")
setGradientBackground(binding.main, startColor, endColor)
setupTabListeners() setupTabListeners()
setupClickListeners() setupClickListeners()
switchToSmsMode() switchToSmsMode()
@@ -159,4 +166,15 @@ class LoginActivity : AppCompatActivity() {
} }
}.start() }.start()
} }
private fun setGradientBackground(
view: android.view.View,
startColor: Int,
endColor: Int,
orientation: GradientDrawable.Orientation = GradientDrawable.Orientation.TL_BR
) {
val gradientDrawable = GradientDrawable(orientation, intArrayOf(startColor, endColor))
gradientDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
view.background = gradientDrawable
}
} }

View File

@@ -1,6 +1,8 @@
package com.example.defenseapplication.login package com.example.defenseapplication.login
import android.content.Intent import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.os.Bundle import android.os.Bundle
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@@ -19,7 +21,10 @@ class RegisterActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
binding = RegisterActivityBinding.inflate(layoutInflater) binding = RegisterActivityBinding.inflate(layoutInflater)
setContentView(binding.root) setContentView(binding.root)
// 设置渐变背景
val startColor = Color.parseColor("#CBEBFA")
val endColor = Color.parseColor("#FFF2EF")
setGradientBackground(binding.main, startColor, endColor)
setupListeners() setupListeners()
//setupTextWatchers() //setupTextWatchers()
} }
@@ -187,4 +192,14 @@ class RegisterActivity : AppCompatActivity() {
// private fun validatePassword(password: String): Boolean { // private fun validatePassword(password: String): Boolean {
// return password.length in 6..20 // return password.length in 6..20
// } // }
private fun setGradientBackground(
view: android.view.View,
startColor: Int,
endColor: Int,
orientation: GradientDrawable.Orientation = GradientDrawable.Orientation.TL_BR
) {
val gradientDrawable = GradientDrawable(orientation, intArrayOf(startColor, endColor))
gradientDrawable.gradientType = GradientDrawable.LINEAR_GRADIENT
view.background = gradientDrawable
}
} }

View File

@@ -220,7 +220,7 @@
android:id="@+id/loginBtn" android:id="@+id/loginBtn"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="32dp" android:layout_marginTop="40dp"
android:text="登录" android:text="登录"
android:textSize="18sp" android:textSize="18sp"
android:background="@drawable/rounded_blue_bg" android:background="@drawable/rounded_blue_bg"

View File

@@ -12,6 +12,7 @@
android:id="@+id/fragment_container" android:id="@+id/fragment_container"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:background="#F5F6F6"
app:layout_constraintBottom_toTopOf="@id/bottom_layout" app:layout_constraintBottom_toTopOf="@id/bottom_layout"
app:layout_constraintTop_toTopOf="parent"/> app:layout_constraintTop_toTopOf="parent"/>

View File

@@ -3,7 +3,6 @@
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="#F9F9F9 "
tools:context=".home.HomeMenuFragment"> tools:context=".home.HomeMenuFragment">
<LinearLayout <LinearLayout
@@ -12,6 +11,7 @@
android:orientation="vertical"> android:orientation="vertical">
<LinearLayout <LinearLayout
android:id="@+id/gradient_layout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
@@ -101,25 +101,22 @@
</FrameLayout> </FrameLayout>
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
</LinearLayout>
<TextView <TextView
android:id="@+id/tvDeviceTitle" android:id="@+id/tvDeviceTitle"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="14dp" android:layout_marginTop="14dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:text="设备" android:text="设备"
android:textColor="@color/black" android:textColor="@color/black"
android:textSize="16dp" android:textSize="16dp"
android:textStyle="bold" /> android:textStyle="bold" />
</LinearLayout>
<GridLayout <GridLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:columnCount="2" android:columnCount="2"
android:orientation="vertical" android:orientation="vertical"

View File

@@ -2,7 +2,7 @@
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:background="@color/login_background" android:background="@color/white"
android:id="@+id/main" android:id="@+id/main"
android:padding="16dp" android:padding="16dp"
android:layout_width="match_parent" android:layout_width="match_parent"