From 168f53f24a8d13968a9e13d3072af8f046f674be Mon Sep 17 00:00:00 2001
From: cloudroam <cloudroam>
Date: 星期一, 24 三月 2025 18:01:58 +0800
Subject: [PATCH] fix 324 免登陆,删除ActionBar
---
app/src/main/res/drawable/bg_button_black.xml | 5
app/src/main/res/values/styles.xml | 29 +
app/src/main/res/drawable/me_offline_mode.xml | 9
app/src/main/java/com/example/firstapp/database/repository/KeywordRepository.kt | 2
app/src/main/res/drawable/me_feedback.xml | 18 +
app/src/main/res/drawable/me_xiaohongshu.xml | 12
app/src/main/res/layout/dialog_edit_profile.xml | 16
app/src/main/res/drawable/me_wait_todo.xml | 21 +
app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt | 131 ++++++-
app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt | 137 +++++++
app/src/main/res/drawable/me_tutorial.xml | 12
app/src/main/res/layout/activity_edit_profile.xml | 127 +++++++
app/src/main/res/drawable/me_friend_invitation.xml | 18 +
app/src/main/res/drawable/ic_back.xml | 9
app/src/main/AndroidManifest.xml | 4
app/src/main/java/com/example/firstapp/utils/SettingUtils.kt | 2
app/src/main/java/com/example/firstapp/database/service/ApiService.kt | 7
app/src/main/res/drawable/me_ai_assistant.png | 0
app/src/main/res/layout/fragment_notifications.xml | 455 +++++++++++++------------
app/src/main/res/drawable/me_privacy.xml | 9
app/src/main/res/drawable/me_set_reminder.xml | 9
app/src/main/res/drawable/me_email.xml | 17
app/src/main/res/drawable/default_avatar.xml | 8
app/src/main/java/com/example/firstapp/database/entity/ApiResponse.kt | 2
app/src/main/java/com/example/firstapp/database/response/UserInfo.kt | 11
25 files changed, 825 insertions(+), 245 deletions(-)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f471d9e..0446048 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -111,7 +111,9 @@
android:name=".activity.ContentDetailActivity"
android:theme="@style/Theme.ContentDetail"
android:exported="false" />
-
+ <activity
+ android:name=".ui.profile.EditProfileActivity"
+ android:exported="false"/>
</application>
</manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/database/entity/ApiResponse.kt b/app/src/main/java/com/example/firstapp/database/entity/ApiResponse.kt
index 40a0f4b..aa0f21c 100644
--- a/app/src/main/java/com/example/firstapp/database/entity/ApiResponse.kt
+++ b/app/src/main/java/com/example/firstapp/database/entity/ApiResponse.kt
@@ -1,7 +1,7 @@
package com.example.firstapp.database.entity
data class ApiResponse<T>(
- val status: Int,
+ val code: String,
val msg: String,
val info: String,
val data: T
diff --git a/app/src/main/java/com/example/firstapp/database/repository/KeywordRepository.kt b/app/src/main/java/com/example/firstapp/database/repository/KeywordRepository.kt
index 4b9caf7..26c45cb 100644
--- a/app/src/main/java/com/example/firstapp/database/repository/KeywordRepository.kt
+++ b/app/src/main/java/com/example/firstapp/database/repository/KeywordRepository.kt
@@ -15,7 +15,7 @@
return try {
// 从网络获取配置
val response = apiService.getKeywords()
- if (response.status == 1) {
+ if (response.code == "0") {
// 保存到本地数据库作为缓存
saveToLocal(response.data)
keywordDao.getAllKeywords()
diff --git a/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt b/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt
new file mode 100644
index 0000000..a9c0cec
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/database/response/UserInfo.kt
@@ -0,0 +1,11 @@
+package com.example.firstapp.database.response
+
+// 添加数据类
+data class UserInfo(
+ val id: Long,
+ val name: String,
+ val cover: String,
+ val contactTel: String,
+ val passTime: String,
+ val showed: Boolean
+)
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
index 2aca993..b563cd2 100644
--- a/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
+++ b/app/src/main/java/com/example/firstapp/database/service/ApiService.kt
@@ -6,10 +6,12 @@
import com.example.firstapp.database.response.DictResponse
import com.example.firstapp.database.response.LoginResponse
import com.example.firstapp.database.response.SecurityResponse
+import com.example.firstapp.database.response.UserInfo
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.GET
import retrofit2.http.POST
+import retrofit2.http.Path
import retrofit2.http.Query
/**
@@ -34,12 +36,15 @@
@GET("config-security/enable-list-all")
suspend fun getSecurityList(): SecurityResponse
+
+ @GET("flower/api/supplier/info/{phone}")
+ suspend fun getUserInfo(@Path("phone") phone: String): ApiResponse<UserInfo>
}
// 创建Retrofit实例(单例)
object RetrofitClient{
- private const val BASE_URL ="http://192.168.1.198:8888/jshERP-boot/"
+ private const val BASE_URL ="http://192.168.1.213:8080/"
//添加Gson解析器,用于自动将JSON响应转换为Kotlin/Java对象
private val retrofit = Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(GsonConverterFactory.create()).build()
diff --git a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
index 455a039..a2becfc 100644
--- a/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
+++ b/app/src/main/java/com/example/firstapp/ui/notifications/NotificationsFragment.kt
@@ -11,6 +11,8 @@
import android.view.ViewGroup
import android.widget.EditText
import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.navigation.fragment.findNavController
@@ -21,7 +23,9 @@
import com.example.firstapp.databinding.FragmentNotificationsBinding
import com.example.firstapp.ui.reminderOther.ReminderOtherAddActivity2
import com.example.firstapp.ui.reminderOther.ReminderSettingsFragmentOther
+import com.example.firstapp.ui.profile.EditProfileActivity
import kotlinx.coroutines.launch
+import com.bumptech.glide.Glide
class NotificationsFragment : Fragment() {
@@ -40,6 +44,31 @@
private var xiaohongshuUrl = ""
private var contactEmail = ""
private var shareText = ""
+
+ private val editProfileLauncher = registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult()
+ ) { result ->
+ if (result.resultCode == AppCompatActivity.RESULT_OK) {
+ result.data?.let { data ->
+ // 更新昵称
+ val newNickname = data.getStringExtra("nickname")
+ newNickname?.let {
+ binding.tvNickname.text = it
+ }
+
+ // 更新头像
+ val avatarUri = data.getStringExtra("avatar_uri")
+ avatarUri?.let {
+ Glide.with(requireContext())
+ .load(Uri.parse(it))
+ .circleCrop()
+ .into(binding.ivAvatar)
+ }
+
+ // TODO: 将更新后的信息保存到服务器
+ }
+ }
+ }
override fun onCreateView(
inflater: LayoutInflater,
@@ -92,49 +121,72 @@
private fun setupClickListeners() {
// 设置提醒
- binding.settingsReminder.setOnClickListener {
- // 跳转到设置提醒页面
+ binding.layoutReminder.setOnClickListener {
findNavController().navigate(R.id.action_navigation_notifications_to_reminderSettingsFragment)
}
-// 设置其他提醒 暂时不需要
-// binding.settingsReminderOther.setOnClickListener {
-// // 跳转到设置提醒页面
-// findNavController().navigate(R.id.action_settings_to_reminderSettingsFragmentOther)
-// }
+ // 待办
+ binding.layoutTodo.setOnClickListener {
+ // TODO: 实现待办功能
+ Toast.makeText(context, "待办功能开发中", Toast.LENGTH_SHORT).show()
+ }
+ // 好友邀请
+ binding.layoutInvite.setOnClickListener {
+ shareToWechat()
+ }
+ // AI助手
+ binding.layoutAi.setOnClickListener {
+ // TODO: 实现AI助手功能
+ Toast.makeText(context, "AI助手功能开发中", Toast.LENGTH_SHORT).show()
+ }
+
+ // 离线模式
+ binding.layoutOffline.setOnClickListener {
+ // TODO: 实现离线模式功能
+ Toast.makeText(context, "离线模式功能开发中", Toast.LENGTH_SHORT).show()
+ }
// 关于小红书
- binding.aboutApp.setOnClickListener {
- // 跳转到小红书账号页面
+ binding.layoutAbout.setOnClickListener {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(xiaohongshuUrl))
startActivity(intent)
}
// 邮件联系
- binding.emailContact.setOnClickListener {
+ binding.layoutEmail.setOnClickListener {
showEmailDialog()
}
// 意见与反馈
- binding.feedback.setOnClickListener {
+ binding.layoutFeedback.setOnClickListener {
showFeedbackDialog()
}
- // 分享给好友
- binding.shareToFriends.setOnClickListener {
- shareToWechat()
- }
-
// 隐私协议
- binding.privacyPolicy.setOnClickListener {
+ binding.layoutPrivacy.setOnClickListener {
startContentActivity("privacy_policy", "隐私协议")
}
- // 如何使用
- binding.howToUse.setOnClickListener {
- startContentActivity("user_guide", "使用说明")
+ // 使用教程
+ binding.layoutTutorial.setOnClickListener {
+ startContentActivity("user_guide", "使用教程")
+ }
+
+ // 头像点击
+ binding.layoutUserInfo.setOnClickListener {
+ val intent = Intent(requireContext(), EditProfileActivity::class.java).apply {
+ putExtra("nickname", binding.tvNickname.text.toString())
+ // 如果有当前头像的URL,也可以传递
+ // putExtra("avatar_url", currentAvatarUrl)
+ }
+ editProfileLauncher.launch(intent)
+ }
+
+ // VIP续费
+ binding.btnRenew.setOnClickListener {
+ Toast.makeText(context, "VIP续费功能开发中", Toast.LENGTH_SHORT).show()
}
}
@@ -198,6 +250,45 @@
startActivity(intent)
}
+ private suspend fun loadUserInfo() {
+ try {
+ val response = RetrofitClient.apiService.getUserInfo("17586582287")
+ if (response.code == "0" && response.data != null) {
+ val userInfo = response.data
+
+ // 设置头像
+ Glide.with(this)
+ .load(userInfo.cover)
+ .placeholder(R.drawable.default_avatar)
+ .into(binding.ivAvatar)
+
+ // 设置昵称和账号
+ binding.tvNickname.text = userInfo.name
+ binding.tvUserId.text = "个人账号:${userInfo.contactTel}"
+
+ // 设置VIP信息
+ if (userInfo.showed) {
+ binding.cardVip.visibility = View.VISIBLE
+ binding.tvVipExpire.text = "${userInfo.passTime} 到期"
+ } else {
+ binding.cardVip.visibility = View.GONE
+ }
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ Toast.makeText(context, "获取用户信息失败", Toast.LENGTH_SHORT).show()
+ }
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ // 加载用户信息
+ lifecycleScope.launch {
+ loadUserInfo()
+ }
+ }
+
override fun onDestroyView() {
super.onDestroyView()
_binding = null
diff --git a/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt b/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
new file mode 100644
index 0000000..761bc17
--- /dev/null
+++ b/app/src/main/java/com/example/firstapp/ui/profile/EditProfileActivity.kt
@@ -0,0 +1,137 @@
+package com.example.firstapp.ui.profile
+
+import android.Manifest
+import android.app.Activity
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.net.Uri
+import android.os.Build
+import android.os.Bundle
+import android.provider.MediaStore
+import android.view.View
+import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.content.ContextCompat
+import com.bumptech.glide.Glide
+import com.example.firstapp.R
+import com.example.firstapp.databinding.ActivityEditProfileBinding
+
+class EditProfileActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityEditProfileBinding
+ private var selectedImageUri: Uri? = null
+
+ private val pickImage = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ if (result.resultCode == Activity.RESULT_OK) {
+ result.data?.data?.let { uri ->
+ selectedImageUri = uri
+ Glide.with(this)
+ .load(uri)
+ .circleCrop()
+ .into(binding.ivAvatar)
+ }
+ }
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityEditProfileBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ // 设置状态栏
+ window.statusBarColor = ContextCompat.getColor(this, android.R.color.white)
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
+ }
+
+ // 获取传入的数据
+ val currentNickname = intent.getStringExtra("nickname") ?: ""
+ val currentAvatarUrl = intent.getStringExtra("avatar_url")
+
+ // 设置当前数据
+ binding.etNickname.setText(currentNickname)
+ if (!currentAvatarUrl.isNullOrEmpty()) {
+ Glide.with(this)
+ .load(currentAvatarUrl)
+ .circleCrop()
+ .into(binding.ivAvatar)
+ }
+
+ // 设置点击事件
+ binding.btnBack.setOnClickListener {
+ finish()
+ }
+
+ binding.ivAvatar.setOnClickListener {
+ checkAndRequestPermission()
+ }
+
+ binding.btnSaveBottom.setOnClickListener {
+ saveAndFinish()
+ }
+
+ binding.btnSaveBottom.setOnClickListener {
+ saveAndFinish()
+ }
+ }
+
+ private fun saveAndFinish() {
+ val newNickname = binding.etNickname.text.toString()
+ if (newNickname.isEmpty()) {
+ Toast.makeText(this, "昵称不能为空", Toast.LENGTH_SHORT).show()
+ return
+ }
+
+ val resultIntent = Intent().apply {
+ putExtra("nickname", newNickname)
+ putExtra("avatar_uri", selectedImageUri?.toString())
+ }
+ setResult(Activity.RESULT_OK, resultIntent)
+ finish()
+ }
+
+ private fun checkAndRequestPermission() {
+ when {
+ ContextCompat.checkSelfPermission(
+ this,
+ Manifest.permission.READ_EXTERNAL_STORAGE
+ ) == PackageManager.PERMISSION_GRANTED -> {
+ openGallery()
+ }
+ else -> {
+ ActivityCompat.requestPermissions(
+ this,
+ arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE),
+ PERMISSION_REQUEST_CODE
+ )
+ }
+ }
+ }
+
+ override fun onRequestPermissionsResult(
+ requestCode: Int,
+ permissions: Array<out String>,
+ grantResults: IntArray
+ ) {
+ super.onRequestPermissionsResult(requestCode, permissions, grantResults)
+ when (requestCode) {
+ PERMISSION_REQUEST_CODE -> {
+ if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
+ openGallery()
+ } else {
+ Toast.makeText(this, "需要存储权限来选择头像", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+ }
+
+ private fun openGallery() {
+ val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
+ pickImage.launch(intent)
+ }
+
+ companion object {
+ private const val PERMISSION_REQUEST_CODE = 100
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/firstapp/utils/SettingUtils.kt b/app/src/main/java/com/example/firstapp/utils/SettingUtils.kt
index 02dd9a9..0d96f96 100644
--- a/app/src/main/java/com/example/firstapp/utils/SettingUtils.kt
+++ b/app/src/main/java/com/example/firstapp/utils/SettingUtils.kt
@@ -161,6 +161,6 @@
}
init {
- throw UnsupportedOperationException("u can't instantiate me...")
+ throw UnsupportedOperationException("u can't instantiate drawable-me...")
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_button_black.xml b/app/src/main/res/drawable/bg_button_black.xml
new file mode 100644
index 0000000..55bcaa7
--- /dev/null
+++ b/app/src/main/res/drawable/bg_button_black.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+ <solid android:color="@android:color/black"/>
+ <corners android:radius="4dp"/>
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/default_avatar.xml b/app/src/main/res/drawable/default_avatar.xml
new file mode 100644
index 0000000..39c184b
--- /dev/null
+++ b/app/src/main/res/drawable/default_avatar.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval">
+ <solid android:color="#CCCCCC" />
+ <size
+ android:width="50dp"
+ android:height="50dp" />
+</shape>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_back.xml b/app/src/main/res/drawable/ic_back.xml
new file mode 100644
index 0000000..b0ce776
--- /dev/null
+++ b/app/src/main/res/drawable/ic_back.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path
+ android:fillColor="#000000"
+ android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
+</vector>
\ No newline at end of file
diff --git a/app/src/main/res/drawable/me_ai_assistant.png b/app/src/main/res/drawable/me_ai_assistant.png
new file mode 100644
index 0000000..4eaeba7
--- /dev/null
+++ b/app/src/main/res/drawable/me_ai_assistant.png
Binary files differ
diff --git a/app/src/main/res/drawable/me_email.xml b/app/src/main/res/drawable/me_email.xml
new file mode 100644
index 0000000..8c1c6dd
--- /dev/null
+++ b/app/src/main/res/drawable/me_email.xml
@@ -0,0 +1,17 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M985.2,842.5c-1.7,23.9 -24.2,45.3 -49.5,47.6a4795.6,4795.6 0,0 1,-847.4 0c-25.3,-2.3 -47.8,-23.8 -49.5,-47.6 -13.7,-194 1.8,-388 46.3,-582.1 5.6,-23.9 28.8,-45.1 51.2,-47.1a4253,4253 0,0 1,751.5 0c22.4,2 45.6,23.3 51.2,47.1 44.5,194 59.9,388 46.3,582.1z"
+ android:fillColor="#0091FF"/>
+ <path
+ android:pathData="M887.7,213.3a4266.5,4266.5 0,0 0,-246.9 -14.7c-74.8,115.1 -169.5,235.4 -266.7,353.4 109.5,111.4 227.4,225.8 335.5,332.6a5141.6,5141.6 0,0 0,265.7 -17.2c5.5,-7.4 9.1,-16 9.7,-24.9 13.7,-194 -1.8,-388 -46.3,-582.1 -5.6,-23.9 -28.8,-45.1 -51.2,-47.1z"
+ android:strokeAlpha="0.3"
+ android:fillColor="#1B6DAB"
+ android:fillAlpha="0.3"/>
+ <path
+ android:pathData="M888.5,213.3A4252.9,4252.9 0,0 0,137.1 213.2c-16.5,1.5 -33.2,13.3 -43.3,28.9 97.2,124.1 238,268.8 383.4,413.4 18.2,18.1 47.8,18.1 66,0 146.7,-145.8 288.7,-291.8 386.2,-416.7 -10.2,-13.9 -25.7,-24.1 -40.9,-25.5z"
+ android:fillColor="#42AEFF"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_feedback.xml b/app/src/main/res/drawable/me_feedback.xml
new file mode 100644
index 0000000..ec7c085
--- /dev/null
+++ b/app/src/main/res/drawable/me_feedback.xml
@@ -0,0 +1,18 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="128dp"
+ android:height="128dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M360.4,557.5l184.9,0 0,30.8 -184.9,0 0,-30.8Z"
+ android:fillColor="#00D3D3"/>
+ <path
+ android:pathData="M360.4,481l308.2,0 0,30.8 -308.2,0 0,-30.8Z"
+ android:fillColor="#00D3D3"/>
+ <path
+ android:pathData="M360.4,404.4l308.2,0 0,30.8 -308.2,0 0,-30.8Z"
+ android:fillColor="#00D3D3"/>
+ <path
+ android:pathData="M512,64c-247.3,0 -447.7,200.5 -447.7,447.7s200.5,447.7 447.7,447.7 447.7,-200.5 447.7,-447.7S759.3,64 512,64zM761.1,620.2c0,34 -27.6,61.6 -61.6,61.6l-154.1,0 0,123.3L422,681.8 329.6,681.8c-34,0 -61.6,-27.6 -61.6,-61.6L267.9,373.6c0,-34 27.6,-61.6 61.6,-61.6l369.8,0c34,0 61.6,27.6 61.6,61.6L761.1,620.2z"
+ android:fillColor="#00D3D3"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_friend_invitation.xml b/app/src/main/res/drawable/me_friend_invitation.xml
new file mode 100644
index 0000000..29a482d
--- /dev/null
+++ b/app/src/main/res/drawable/me_friend_invitation.xml
@@ -0,0 +1,18 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M249.7,287.7h524.9c82.9,0 149.7,67.4 149.7,149.7L924.3,862.2c0,82.9 -67.4,149.7 -149.7,149.7L249.7,1011.9c-82.9,0 -149.7,-67.4 -149.7,-149.7L99.9,437.2c-0.6,-82.1 66.8,-149.5 149.7,-149.5zM249.7,287.7"
+ android:fillColor="#FF5000"/>
+ <path
+ android:pathData="M399.2,562.8h225.1v449.5L399.2,1012.3L399.2,562.8zM535.3,188.2s154.6,-190.5 199.7,-174.9c0,0 82.9,-48.1 124.9,249.9v24.8h-124.9s21.1,-179.4 -50.2,-149.7L534.5,287.9c0.8,-0.2 0.8,-99.7 0.8,-99.7zM479,188.8S324.4,0.2 279.3,15.8c0,0 -82.9,-47.5 -124.9,247.4v24.8h124.9S258.3,110.6 329.5,139.5l100.1,98.9 50.2,49.6 -0.8,-99.1zM479,188.8"
+ android:fillColor="#FFB400"/>
+ <path
+ android:pathData="M161.8,287.7h699.4c76,0 137.2,61.2 137.2,137.2s-61.8,137.2 -137.2,137.2L161.8,562.2c-76,0 -137.2,-61.2 -137.2,-137.2s61.8,-137.2 137.2,-137.2zM161.8,287.7"
+ android:fillColor="#FF6E00"/>
+ <path
+ android:pathData="M624.2,300v-12.3h-0.6c-6.1,-56.3 -53.9,-100.1 -111.8,-100.1 -58.2,0 -105.7,43.8 -111.8,100.1h-0.6v275h225.1L624.4,300zM624.2,300"
+ android:fillColor="#FFC937"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_offline_mode.xml b/app/src/main/res/drawable/me_offline_mode.xml
new file mode 100644
index 0000000..68bf30b
--- /dev/null
+++ b/app/src/main/res/drawable/me_offline_mode.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="51.2dp"
+ android:height="32dp"
+ android:viewportWidth="1638"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M1292.8,384A481.7,481.7 0,0 0,819.2 0C633.5,0 473.6,102.4 396.8,256 198.3,281.6 51.2,441.5 51.2,640A385.1,385.1 0,0 0,435.2 1024h831.9A316.9,316.9 0,0 0,1587.2 703.9c0,-166.3 -134.3,-307.2 -294.4,-319.9m-247.5,-38.1a63.9,63.9 0,0 1,0 90.4L909.6,571.9l135.7,135.7a63.9,63.9 0,0 1,-90.4 90.4L819.2,662.3 683.5,798a63.9,63.9 0,0 1,-90.4 -90.4l135.7,-135.7 -135.7,-135.6a63.9,63.9 0,1 1,90.4 -90.4L819.2,481.5l135.7,-135.6a63.9,63.9 0,0 1,90.4 0z"
+ android:fillColor="#1296db"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_privacy.xml b/app/src/main/res/drawable/me_privacy.xml
new file mode 100644
index 0000000..7c559d8
--- /dev/null
+++ b/app/src/main/res/drawable/me_privacy.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M464.3,14.4a73.9,73.9 0,0 1,87.7 0,682.2 682.2,0 0,0 164.5,96 1345.9,1345.9 0,0 0,184 42.9A72.6,72.6 0,0 1,957.4 217.3l0.3,0.6h-2.6a2953.9,2953.9 0,0 1,-3.2 305.9c-40.3,324.8 -293.1,499.2 -442.6,499.2 -149.4,0 -448,-247.4 -448,-503l0,-12.7v-4.3l0,-8.6 0,-8.6 0,-17.2c0.3,-121.6 1.7,-241.1 1.8,-249.1l0,-0.4a67.2,67.2 0,0 1,56.3 -64,608 608,0 0,0 178.9,-44.8 430.7,430.7 0,0 0,165.8 -96zM522.6,375c-40.7,0 -73.7,33 -73.7,73.7 0,25.6 13,48.1 32.8,61.3v136.7a42.3,42.3 0,0 0,84.6 0L566.3,510.2c0,-0.7 -0,-1.3 -0.1,-2a73.6,73.6 0,0 0,30.1 -59.4c0,-40.7 -33,-73.7 -73.7,-73.7z"
+ android:fillColor="#000000"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_set_reminder.xml b/app/src/main/res/drawable/me_set_reminder.xml
new file mode 100644
index 0000000..7626b5b
--- /dev/null
+++ b/app/src/main/res/drawable/me_set_reminder.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M648.2,887.7C648.1,962.8 587.6,1023.8 511.8,1023.8 436.7,1023.8 375.7,963.1 375.5,887.7 375.5,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7 648.2,887.7ZM603,88.6C603,39.8 562.2,0 511.9,0 461.7,0 420.9,39.7 420.9,88.6 420.9,93.5 421.3,98.4 422.1,103.2 296.4,145.8 205.1,254.8 205.1,409.7 205.1,409.7 205.1,580.3 205.1,580.3 205.1,580.3 193.3,728.9 148.9,730.4 122.5,730.4 102.2,750.3 102.2,774.7 102.2,799.3 122.6,819 147.8,819 147.8,819 511.9,819 511.9,819 511.9,819 830.6,819 830.6,819 830.6,819 876.1,819 876.1,819 901.4,819 921.6,799.2 921.6,774.7 921.6,750.1 901.3,730.4 876.1,730.4 830.6,730.4 819.4,580.3 819.4,580.3 819.4,580.3 819.4,409.7 819.4,409.7 819.4,254.7 734.2,145.6 601.8,103.1 602.6,98.4 603,93.5 603,88.6 603,88.6 603,88.6 603,88.6 603,88.6 603,88.6 603,88.6Z"
+ android:fillColor="#272636"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_tutorial.xml b/app/src/main/res/drawable/me_tutorial.xml
new file mode 100644
index 0000000..789feea
--- /dev/null
+++ b/app/src/main/res/drawable/me_tutorial.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M513.1,189.8c-177.9,0 -322.2,144.2 -322.2,322.2 0,177.9 144.2,322.2 322.2,322.2 177.9,0 322.2,-144.2 322.2,-322.2 -0,-177.9 -144.2,-322.2 -322.2,-322.2zM533.8,670c-5.7,5.6 -12.4,8.5 -20.2,8.5 -7.7,0 -14.4,-2.9 -20.2,-8.5 -5.7,-5.6 -8.6,-12.3 -8.6,-19.9 0,-7.6 2.8,-14.3 8.6,-19.9 5.7,-5.6 12.4,-8.5 20.2,-8.5 7.7,0 14.5,2.8 20.2,8.5 5.7,5.7 8.6,12.3 8.6,19.9 0,7.6 -2.9,14.3 -8.6,19.9zM617,446.1c-5,10.6 -16.6,24.4 -34.8,41.4 -8.7,8.6 -16.1,16 -22.2,22.2 -6,6.2 -10.6,11.4 -13.6,15.7 -5.4,8 -8.9,15.8 -10.6,23.4 -1.3,6.6 -2,18.1 -2,34.4 0,5.3 -2.4,9.3 -7.1,12 -4.7,2.7 -9.8,4 -15.4,4 -5.6,0 -10.6,-1.3 -15.2,-3.7 -4.5,-2.5 -6.8,-6.6 -6.8,-12.2 0.3,-12.6 0.8,-23 1.5,-31.2 0.7,-8.2 2.5,-15.9 5.6,-23.2 3,-7.3 7.9,-15 14.6,-23.2 6.7,-8.2 16.1,-18.7 28.2,-31.7 16.1,-16 26.6,-27.7 31.3,-35.4 4.7,-7.6 7.1,-18.8 7.1,-33.4 0,-7.3 -1.3,-14.3 -4,-21 -2.7,-6.6 -6.6,-12.5 -11.6,-17.7 -5,-5.2 -11.4,-9.2 -18.9,-12.2 -7.6,-3 -16.4,-4.5 -26.5,-4.5 -44.7,0 -67.1,26.3 -67.1,78.8 0,13.3 -7.7,19.9 -23.2,19.9 -6.7,0 -12,-1.8 -15.6,-5.5 -3.7,-3.6 -5.5,-8.5 -5.5,-14.4 0,-40.5 11.1,-70.1 33.3,-88.8 22.5,-18.6 49.1,-27.9 79.7,-27.9 30.6,0 56,9 76.2,26.9 20.5,17.3 30.8,40.9 30.8,70.8 -0,13.6 -2.7,25.7 -8.1,36.4z"
+ android:fillColor="#d4237a"/>
+ <path
+ android:pathData="M802.7,4.1H223.5c-120.5,0 -218.2,97.7 -218.2,218.2v579.3c0,120.5 97.7,218.2 218.2,218.2H802.7c120.5,0 218.2,-97.7 218.2,-218.2V222.4c0,-120.5 -97.7,-218.2 -218.2,-218.2zM513.1,890.2c-208.9,0 -378.2,-169.3 -378.2,-378.2 0,-208.9 169.3,-378.2 378.2,-378.2 208.9,0 378.2,169.4 378.2,378.2 -0,208.9 -169.3,378.2 -378.2,378.2z"
+ android:fillColor="#d4237a"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_wait_todo.xml b/app/src/main/res/drawable/me_wait_todo.xml
new file mode 100644
index 0000000..7b2ca02
--- /dev/null
+++ b/app/src/main/res/drawable/me_wait_todo.xml
@@ -0,0 +1,21 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M76.4,82.1m135.9,0l525.5,0q135.9,0 135.9,135.9l0,580.5q0,135.9 -135.9,135.9l-525.5,0q-135.9,0 -135.9,-135.9l0,-580.5q0,-135.9 135.9,-135.9Z"
+ android:fillColor="#A5ADF6"/>
+ <path
+ android:pathData="M642.4,379.2H229.3a41,41 0,0 1,0 -81.9h413.1a41,41 0,1 1,0 81.9zM485.5,611.9h-256a41,41 0,0 1,0 -81.9h256a41,41 0,0 1,0 81.9z"
+ android:fillColor="#FFFFFF"/>
+ <path
+ android:pathData="M738.6,724.7m-221.6,0a221.6,221.6 0,1 0,443.2 0,221.6 221.6,0 1,0 -443.2,0Z"
+ android:fillColor="#A5ADF6"/>
+ <path
+ android:pathData="M738.6,503.1a221.5,221.5 0,0 0,-71.7 431.3h70.8a135.9,135.9 0,0 0,136.1 -135.7v-249.5a220.2,220.2 0,0 0,-135.2 -46.1z"
+ android:fillColor="#635DF7"/>
+ <path
+ android:pathData="M686.1,857a41,41 0,0 1,-31.3 -67.4l60,-70.9v-97.7a41,41 0,0 1,81.9 0v112.6a41,41 0,0 1,-9.7 26.4l-69.6,82.4a41,41 0,0 1,-31.3 14.6z"
+ android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/app/src/main/res/drawable/me_xiaohongshu.xml b/app/src/main/res/drawable/me_xiaohongshu.xml
new file mode 100644
index 0000000..b837f91
--- /dev/null
+++ b/app/src/main/res/drawable/me_xiaohongshu.xml
@@ -0,0 +1,12 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="32dp"
+ android:height="32dp"
+ android:viewportWidth="1024"
+ android:viewportHeight="1024">
+ <path
+ android:pathData="M726.5,457.5c-6.7,-0.1 -13.4,0 -20,-0.1 -2.4,0 -3,1.1 -3,3.2 0.1,5.1 0.1,10.1 0.1,15.2v0c0.1,4.9 0,9.8 0.1,14.6 0,3.9 0.7,4.7 4.5,4.7 7.1,0.1 14.3,0 21.4,0.1 2.7,0 3.7,-1.3 3.7,-3.8 -0.1,-9.2 -0.1,-18.3 -0.2,-27.5a6.8,6.8 0,0 0,-6.5 -6.5z"
+ android:fillColor="#FF2E4D"/>
+ <path
+ android:pathData="M849.9,51.2h-675.8c-67.9,0 -122.9,55 -122.9,122.9v675.8c0,67.9 55,122.9 122.9,122.9h675.8c67.9,0 122.9,-55 122.9,-122.9L972.8,174.1c0,-67.9 -55,-122.9 -122.9,-122.9zM250.8,505.7c-0.7,10.6 -1.4,21.3 -2.6,31.8 -2.1,18.4 -6.2,36.3 -14.6,52.9 -2.2,4.1 -5.1,7.8 -8.2,12.5 -1.9,-3.9 -3.4,-7 -4.8,-10.1a3203.6,3203.6 0,0 1,-14.8 -33.6c-0.5,-1.2 -0.9,-2.9 -0.4,-4 3.2,-6.8 3.4,-14.1 3.9,-21.4 0.6,-9.2 1.4,-18.2 2,-27.4 0.5,-7 0.8,-14 1.4,-21 0.7,-8.1 1.5,-16.2 2.2,-24.2 0.1,-2 1,-2.6 2.8,-2.6 11.1,0 22.1,0 33.2,-0.1 2.4,0 3,1 2.9,3.2 -1,14.6 -1.9,29.3 -2.9,43.9zM322.1,593.1c-0.7,9.5 -5.1,17.5 -12.6,23.5 -5.4,4.4 -11.7,6.2 -18.7,6.1 -5.9,0 -11.7,-0.1 -17.5,0 -2,0 -3.3,-0.6 -4.1,-2.6 -3.4,-7.7 -6.9,-15.3 -10.3,-23 -0.5,-1.1 -0.7,-2.3 -1.1,-3.5 -1.6,-4.1 -1.6,-4.3 3,-4.4h13.9c5.9,0 8.5,-2.5 8.6,-8.6 0.1,-4.6 0.1,-9.1 0.1,-13.7L283.3,494.2c0.1,0.2 0.2,0.2 0.3,0.2L283.6,408.6c0,-4.3 0.1,-4.4 4.4,-4.4h29.2c5.1,0 5.2,0.1 5.2,5.4 0,27.2 0,54.4 0.1,81.5 0.1,23.9 0.3,47.8 0.3,71.6 0,10.1 0.1,20.3 -0.7,30.3zM397.7,564.2c-5,11.6 -10.2,23 -15.3,34.5 -0.5,1.1 -1.2,2.3 -2.4,4.4v0c-3,-4.5 -6.1,-8.2 -8.1,-12.4 -2.8,-6.1 -4.5,-12.8 -7.4,-19 -3,-6.7 -4.2,-13.9 -5.6,-20.9 -1.2,-6 -1.4,-12.3 -1.8,-18.3 -1.2,-15.4 -2.2,-30.8 -3.4,-46.1a2450,2450 0,0 0,-2.1 -25.2c-0.1,-1.5 0.2,-2.2 1.9,-2.2 11.5,0 23,-0.1 34.5,-0.2 2.2,0 3,1 3.1,3 0.3,4.7 0.5,9.3 0.9,14 0.3,3.8 0.7,7.7 1,11.4 0.5,5.4 1,10.8 1.4,16.1 0.5,6.9 0.5,13.8 1.5,20.6 1.3,10.4 0.3,21.1 3.9,31.3 0.9,2.4 -1,6.1 -2.2,8.9zM481.9,586.2c-2.9,6.7 -6,13.2 -9,19.8 -1.6,3.7 -3.2,7.5 -4.8,11.3 -1.9,4.5 -3.1,5.4 -7.9,5.4h-22.3c-7.5,0 -15,0.2 -22.5,-0.1 -3.6,-0.1 -7.1,-1.3 -10.6,-2 -1.8,-0.4 -2.2,-1.4 -1.4,-3.1a3709.7,3709.7 0,0 0,13.5 -29.2c1,-2.2 1.9,-4.7 3,-6.9 0.3,-0.6 1.4,-1.3 2,-1.1 12.4,3.2 25.1,2.8 37.8,2.6a874.6,874.6 0,0 1,20.1 0c3.2,0 3.5,0.5 2.2,3.4zM485.8,564.3a4.5,4.5 0,0 1,-2.7 1.4c-13.9,0.1 -27.9,0.1 -41.8,-0.1 -4.2,-0.1 -8.6,-1.1 -11.7,-4.3 -3.4,-3.4 -5,-7.4 -3.3,-11.9a897.5,897.5 0,0 1,9.6 -24.1c3.9,-9.2 7.8,-18.3 12.1,-28.2 -2.3,-0.1 -3.7,-0.3 -5,-0.3 -4.1,-0.1 -8.2,0.3 -12.3,-0.2 -4.5,-0.5 -9,-1 -12.5,-4.8 -3.4,-3.7 -3.9,-8 -2.6,-12.3 2.2,-6.8 5,-13.4 7.8,-20 2.7,-6.2 5.7,-12.2 8.5,-18.2 3,-6.5 5.9,-13.1 8.8,-19.6a1362,1362 0,0 0,7.7 -17.3c0.7,-1.8 1.9,-2.5 3.9,-2.5 10.9,0.1 21.9,0 32.9,0 3.6,0 3.7,0.4 2.3,3.7 -6.3,14.6 -12.7,29.2 -19,43.8a11.5,11.5 0,0 0,-1.2 4.9c0.2,3.9 1,4.5 5.1,4.5 8.2,0.1 16.4,0 24.4,0 1.6,0 3.4,0.2 5,0.3 2.3,0.1 2.6,1.1 1.6,3.1a2455.2,2455.2 0,0 0,-13.4 29.2c-3,6.9 -5.9,13.9 -8.9,20.8a1530.2,1530.2 0,0 1,-6.2 13.8c-1.9,4.2 -0.6,6.3 4.2,6.4 6,0 12,0.1 18.1,0 2.1,0 3.1,0.6 2.1,2.9 -3.6,8.3 -7.2,16.6 -10.8,24.9 -0.7,1.5 -1.4,3.1 -2.4,4.4zM620.6,623h-125.3c-1.7,-0.2 -3.5,-0.2 -5.9,-0.2v-0c0.9,-2.6 1.4,-4.4 2.2,-6.1 4.7,-10.3 9.4,-20.5 14.1,-30.8 1,-2.3 2.5,-2.9 4.8,-2.9h28.7c4.5,0 4.8,-0.2 4.8,-4.7L543.7,461.7c0,-4 -0.1,-4.1 -4.1,-4.1 -6.1,0 -12.3,-0.1 -18.4,0 -2.3,0 -3.3,-0.5 -3.3,-3.1 0.1,-11 0.1,-21.9 0.1,-32.9 0,-3.9 0.1,-3.9 3.9,-3.9h73c4.2,0 8.6,0.1 12.8,0 2,0 2.8,0.8 2.7,2.9 -0.1,11.4 -0.1,22.8 -0.1,34.3 0,2 -0.7,2.8 -2.8,2.8 -6.6,-0.1 -13.1,0.1 -19.8,0.1 -2.3,0 -3.3,1.1 -3.3,3.5 0.1,18.4 0.1,36.7 0.1,55.1 0,20.9 0,41.7 0.1,62.7 0,3.8 0.4,4.2 4.2,4.2h31.4c3.4,0 3.9,0.4 3.9,3.8 0.1,11 0,21.9 0.1,32.9 -0,2.9 -1.6,3.2 -3.7,3.2zM819.3,588.1c-0.1,16.4 -11,29.2 -26.4,32.9 -4.3,1.1 -8.8,1.4 -13.2,1.5 -6.8,0.2 -13.7,0.1 -20.6,0.1 -4.2,0 -5.4,-0.8 -7,-4.7 -3.3,-8 -6.8,-15.9 -10.3,-23.9l-0.7,-1.6c-1.2,-3.1 -0.8,-3.6 2.5,-3.6 9.4,-0.1 19,0.2 28.4,-0.3 5.7,-0.3 8,-2.9 8.2,-8.6 0.2,-11 -0.3,-22.1 -0.1,-33.1 0.1,-5.5 -6.8,-11.4 -11.7,-11.7a32.8,32.8 0,0 0,-2.7 -0.1c-18.7,0 -37.5,0 -56.3,0.1 -5.3,0 -5.7,0.5 -5.7,5.9l0.2,77.6c0,4.1 -0.1,4.2 -4.2,4.2h-31.2c-4,0 -4.3,-0.3 -4.3,-4.3v-39.9c0.1,0.1 0.1,0.1 0.2,0.1v-41c0,-2.8 -1.9,-2.9 -3.8,-2.9 -10.2,0.1 -20.4,0.3 -30.6,0.3 -6.9,0 -6.2,0.8 -6.3,-6.4 -0.1,-9.9 0,-19.9 0,-29.8 0,-3.6 0.4,-4.1 3.9,-4.1 10.7,-0.1 21.3,0 32,-0.1 4.1,0 4.3,-0.2 4.4,-4.2 0.1,-9.9 -0.1,-19.8 0,-29.7 0,-2.5 -1,-3.2 -3.4,-3.2 -6.8,0.1 -13.8,-0.1 -20.6,0 -2.2,0 -2.9,-0.7 -2.9,-2.9 0.1,-11.3 0.1,-22.5 -0.1,-33.7 0,-2.7 1,-3.3 3.4,-3.3 6.3,0.1 12.6,0 19,0 4.2,0 4.5,-0.3 4.5,-4.7 0,-2.6 0.1,-5.2 0,-7.9 -0.1,-2.5 1,-3.2 3.3,-3.2 9.1,0.1 18.2,0.1 27.3,0.1h5c3.9,0 4,0 4.2,4.1 0.1,2.4 -0.2,4.9 -0.1,7.3 0.1,3.4 1,4.3 4.3,4.4 5.7,0.1 11.3,0.1 17,0.1 14.6,0.1 27.4,5.1 37,16.3 5.4,6.2 8.7,13.8 9.2,22.1 0.5,8.5 0.2,17 0.3,25.5 0,3.2 0.2,6.4 0.4,9.5 0.1,3.2 0.9,4 4.1,3.9a48.6,48.6 0,0 1,19 3.2c13,5 21,14.2 23.6,28a44.4,44.4 0,0 1,0.7 8.3c0.1,17.9 0.1,35.8 -0.1,53.7zM810.1,453.6c-5.9,3.9 -12.2,3.8 -19.4,3.7 -2.2,0 -5.2,0.1 -8.1,-0.1 -0.7,-0.1 -2,-1 -2.1,-1.6 -0.7,-8.8 -1.8,-17.8 1.4,-26.4 2.8,-7.6 9.6,-12 17.6,-12.2a20,20 0,0 1,19.3 14.3c2.3,8.3 -1.6,17.4 -8.7,22.2z"
+ android:fillColor="#FF2E4D"/>
+</vector>
diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml
new file mode 100644
index 0000000..d5653b2
--- /dev/null
+++ b/app/src/main/res/layout/activity_edit_profile.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <!-- 标题栏(保持不变) -->
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="56dp"
+ android:background="@android:color/white">
+
+ <ImageButton
+ android:id="@+id/btn_back"
+ android:layout_width="48dp"
+ android:layout_height="48dp"
+ android:layout_centerVertical="true"
+ android:background="?attr/selectableItemBackgroundBorderless"
+ android:src="@drawable/ic_back"
+ android:contentDescription="返回"/>
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerInParent="true"
+ android:text="资料编辑"
+ android:textColor="@android:color/black"
+ android:textSize="18sp"/>
+ </RelativeLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="#EEEEEE"/>
+
+ <!-- 内容区域 -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <!-- 昵称行 -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingVertical="12dp">
+
+ <TextView
+ android:layout_width="80dp"
+ android:layout_height="wrap_content"
+ android:text="昵称"
+ android:textColor="#333333"
+ android:textSize="16sp"/>
+
+ <!-- 使用 View 作为间隔 -->
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"/>
+
+ <EditText
+ android:id="@+id/et_nickname"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:minWidth="120dp"
+ android:background="@null"
+ android:hint="请输入昵称"
+ android:textSize="16sp"
+ android:padding="8dp"
+ android:gravity="end"/> <!-- 文本右对齐 -->
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="#EEEEEE"/>
+
+ <!-- 头像行 -->
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:paddingVertical="16dp">
+
+ <TextView
+ android:layout_width="80dp"
+ android:layout_height="wrap_content"
+ android:text="头像"
+ android:textColor="#333333"
+ android:textSize="16sp"/>
+
+ <!-- 使用 View 作为间隔 -->
+ <View
+ android:layout_width="0dp"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:background="@android:color/transparent"/>
+
+ <com.google.android.material.imageview.ShapeableImageView
+ android:id="@+id/iv_avatar"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:scaleType="centerCrop"
+ android:src="@drawable/default_avatar"/>
+ </LinearLayout>
+ </LinearLayout>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"/>
+
+ <Button
+ android:id="@+id/btn_save_bottom"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_margin="16dp"
+ android:background="@drawable/bg_button_black"
+ android:text="保存"
+ android:textColor="@android:color/white"/>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_edit_profile.xml b/app/src/main/res/layout/dialog_edit_profile.xml
new file mode 100644
index 0000000..cb905f1
--- /dev/null
+++ b/app/src/main/res/layout/dialog_edit_profile.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:padding="16dp">
+
+ <EditText
+ android:id="@+id/edit_nickname"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:hint="输入新昵称"
+ android:inputType="text"
+ android:maxLines="1" />
+
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_notifications.xml b/app/src/main/res/layout/fragment_notifications.xml
index 5a0a012..a6a983e 100644
--- a/app/src/main/res/layout/fragment_notifications.xml
+++ b/app/src/main/res/layout/fragment_notifications.xml
@@ -3,286 +3,301 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:fillViewport="true">
+ android:background="@android:color/white"
+ android:fillViewport="true"
+ android:paddingBottom="56dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
- <!-- 标题栏 -->
- <TextView
+ <!-- 顶部广告位 - 减小高度 -->
+ <ImageView
+ android:id="@+id/iv_banner"
+ android:layout_width="match_parent"
+ android:layout_height="32dp"
+ android:scaleType="centerCrop" />
+
+ <!-- 用户信息区域 - 减小padding -->
+ <RelativeLayout
+ android:id="@+id/layout_user_info"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="#FFE4C4"
- android:gravity="center"
- android:padding="16dp"
- android:text="终身会员"
- android:textColor="@android:color/black"
- android:textSize="20sp"
- android:textStyle="bold" />
+ android:padding="12dp">
- <!-- 功能区标题 -->
- <TextView
+ <com.google.android.material.imageview.ShapeableImageView
+ android:id="@+id/iv_avatar"
+ android:layout_width="50dp"
+ android:layout_height="50dp"
+ android:scaleType="centerCrop"
+ app:shapeAppearanceOverlay="@style/CircleImageView" />
+
+ <TextView
+ android:id="@+id/tv_nickname"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="16dp"
+ android:layout_toEndOf="@id/iv_avatar"
+ android:textColor="@android:color/black"
+ android:textSize="18sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/tv_user_id"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_below="@id/tv_nickname"
+ android:layout_marginStart="16dp"
+ android:layout_marginTop="4dp"
+ android:layout_toEndOf="@id/iv_avatar"
+ android:textColor="@android:color/darker_gray"
+ android:textSize="14sp" />
+ </RelativeLayout>
+
+ <!-- VIP会员卡片 - 减小margin和padding -->
+ <androidx.cardview.widget.CardView
+ android:id="@+id/card_vip"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:paddingHorizontal="16dp"
- android:paddingVertical="8dp"
- android:text="功能"
- android:textColor="@android:color/darker_gray"
- android:textSize="14sp"
- android:textStyle="bold" />
+ android:layout_marginHorizontal="12dp"
+ android:layout_marginVertical="8dp"
+ app:cardCornerRadius="8dp"
+ app:cardElevation="4dp">
- <!-- 设置选项 -->
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@android:color/black"
+ android:orientation="horizontal"
+ android:padding="12dp">
- <!-- 设置提醒 -->
- <RelativeLayout
- android:id="@+id/settings_reminder"
- style="@style/SettingsItem"
- android:padding="16dp">
+ <LinearLayout
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical">
- <TextView
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="VIP会员"
+ android:textColor="#B8741A"
+ android:textSize="18sp"
+ android:textStyle="bold" />
+
+ <TextView
+ android:id="@+id/tv_vip_expire"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="4dp"
+ android:textColor="#FFD700"
+ android:textSize="14sp" />
+ </LinearLayout>
+
+ <Button
+ android:id="@+id/btn_renew"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="设置提醒"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ android:backgroundTint="#7A441E"
+ android:text="立即续费"
+ android:textColor="#FFFFFF" />
+ </LinearLayout>
+ </androidx.cardview.widget.CardView>
+
+ <!-- 功能区域标题 - 调整margin -->
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_columnSpan="4"
+ android:layout_marginStart="12dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="4dp"
+ android:text="功能"
+ android:textColor="#333333"
+ android:textSize="15sp"
+ android:textStyle="bold" />
+
+ <!-- 功能图标网格 - 减小padding和调整间距 -->
+ <GridLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:columnCount="4"
+ android:paddingHorizontal="8dp"
+ android:paddingVertical="4dp">
+
+ <!-- 设置提醒 -->
+ <LinearLayout
+ android:id="@+id/layout_reminder"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_set_reminder" />
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="设置提醒" />
+ </LinearLayout>
- <!-- 设置其他提醒 暂时不需要 -->
-<!-- <RelativeLayout-->
-<!-- android:id="@+id/settings_reminder_other"-->
-<!-- style="@style/SettingsItem"-->
-<!-- android:padding="16dp">-->
+ <!-- 待办 -->
+ <LinearLayout
+ android:id="@+id/layout_todo"
+ style="@style/FunctionIconStyle">
-<!-- <TextView-->
-<!-- android:layout_width="wrap_content"-->
-<!-- android:layout_height="wrap_content"-->
-<!-- android:layout_centerVertical="true"-->
-<!-- android:text="设置其他提醒"-->
-<!-- android:textColor="@android:color/black"-->
-<!-- android:textSize="16sp" />-->
+ <ImageView
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_wait_todo" />
-<!-- <ImageView-->
-<!-- android:layout_width="24dp"-->
-<!-- android:layout_height="24dp"-->
-<!-- android:layout_alignParentEnd="true"-->
-<!-- android:layout_centerVertical="true"-->
-<!-- android:src="@drawable/right_forward" />-->
-<!-- </RelativeLayout>-->
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="待办" />
+ </LinearLayout>
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
+ <!-- 好友邀请 -->
+ <LinearLayout
+ android:id="@+id/layout_invite"
+ style="@style/FunctionIconStyle">
- <!-- 联系与反馈 -->
+ <ImageView
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_friend_invitation" />
+
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="好友邀请" />
+ </LinearLayout>
+
+ <!-- AI助手 -->
+ <LinearLayout
+ android:id="@+id/layout_ai"
+ style="@style/FunctionIconStyle">
+
+ <ImageView
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_ai_assistant" />
+
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="AI助手" />
+ </LinearLayout>
+
+ <!-- 离线模式 -->
+ <LinearLayout
+ android:id="@+id/layout_offline"
+ style="@style/FunctionIconStyle">
+
+ <ImageView
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_offline_mode" />
+
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="离线模式" />
+ </LinearLayout>
+
+ <!-- 联系与反馈标题 - 调整margin -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:paddingHorizontal="16dp"
- android:paddingVertical="8dp"
+ android:layout_columnSpan="4"
+ android:layout_marginStart="12dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="4dp"
android:text="联系与反馈"
- android:textColor="@android:color/darker_gray"
- android:textSize="14sp"
+ android:textColor="#333333"
+ android:textSize="15sp"
android:textStyle="bold" />
<!-- 关于小红书 -->
- <RelativeLayout
- android:id="@+id/about_app"
- style="@style/SettingsItem"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="关于小红书"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ <LinearLayout
+ android:id="@+id/layout_about"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_xiaohongshu" />
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="关于小红书" />
+ </LinearLayout>
<!-- 邮件联系 -->
- <RelativeLayout
- android:id="@+id/email_contact"
- style="@style/SettingsItem"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="邮件联系"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ <LinearLayout
+ android:id="@+id/layout_email"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_email" />
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="邮件联系" />
+ </LinearLayout>
<!-- 意见与反馈 -->
- <RelativeLayout
- android:id="@+id/feedback"
- style="@style/SettingsItem"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="意见与反馈"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ <LinearLayout
+ android:id="@+id/layout_feedback"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
-
- <!-- 分享给好友 -->
- <RelativeLayout
- android:id="@+id/share_to_friends"
- style="@style/SettingsItem"
- android:padding="16dp">
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_feedback" />
<TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="分享给好友"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ style="@style/FunctionTextStyle"
+ android:text="意见与反馈" />
+ </LinearLayout>
- <ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
-
- <!-- 其他区域标题 -->
+ <!-- 其他标题 - 调整margin -->
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginTop="16dp"
- android:paddingHorizontal="16dp"
- android:paddingVertical="8dp"
+ android:layout_columnSpan="4"
+ android:layout_marginStart="12dp"
+ android:layout_marginTop="12dp"
+ android:layout_marginBottom="4dp"
android:text="其他"
- android:textColor="@android:color/darker_gray"
- android:textSize="14sp"
+ android:textColor="#333333"
+ android:textSize="15sp"
android:textStyle="bold" />
<!-- 隐私协议 -->
- <RelativeLayout
- android:id="@+id/privacy_policy"
- style="@style/SettingsItem"
- android:padding="16dp">
-
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="隐私协议"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ <LinearLayout
+ android:id="@+id/layout_privacy"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
-
- <View
- android:layout_width="match_parent"
- android:layout_height="0.5dp"
- android:layout_marginHorizontal="16dp"
- android:background="#E0E0E0" />
-
- <!-- 如何使用 -->
- <RelativeLayout
- android:id="@+id/how_to_use"
- style="@style/SettingsItem"
- android:padding="16dp">
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_privacy" />
<TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:text="如何使用"
- android:textColor="@android:color/black"
- android:textSize="16sp" />
+ style="@style/FunctionTextStyle"
+ android:text="隐私协议" />
+ </LinearLayout>
+
+ <!-- 使用教程 -->
+ <LinearLayout
+ android:id="@+id/layout_tutorial"
+ style="@style/FunctionIconStyle">
<ImageView
- android:layout_width="24dp"
- android:layout_height="24dp"
- android:layout_alignParentEnd="true"
- android:layout_centerVertical="true"
- android:src="@drawable/right_forward" />
- </RelativeLayout>
+ style="@style/FunctionImageStyle"
+ android:src="@drawable/me_tutorial" />
- </LinearLayout>
+ <TextView
+ style="@style/FunctionTextStyle"
+ android:text="使用教程" />
+ </LinearLayout>
+
+ </GridLayout>
+
+ <!-- 底部间距缩小 -->
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="8dp" />
</LinearLayout>
</ScrollView>
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index e08b4e9..b325d99 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -17,4 +17,33 @@
<item name="android:background">@color/black_overlay</item>
<item name="android:buttonBarStyle">?android:attr/buttonBarStyle</item>
</style>
+
+ <!-- 功能图标样式 -->
+ <style name="FunctionIconStyle">
+ <item name="android:layout_width">0dp</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_columnWeight">1</item>
+ <item name="android:gravity">center</item>
+ <item name="android:orientation">vertical</item>
+ <item name="android:padding">8dp</item>
+ </style>
+
+ <style name="FunctionImageStyle">
+ <item name="android:layout_width">50dp</item>
+ <item name="android:layout_height">50dp</item>
+ <item name="android:padding">6dp</item>
+ </style>
+
+ <style name="FunctionTextStyle">
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_marginTop">2dp</item>
+ <item name="android:textSize">11sp</item>
+ <item name="android:textColor">@android:color/black</item>
+ </style>
+
+ <style name="CircleImageView">
+ <item name="cornerFamily">rounded</item>
+ <item name="cornerSize">50%</item>
+ </style>
</resources>
--
Gitblit v1.9.3