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