添加设备

This commit is contained in:
2026-04-30 13:47:26 +08:00
parent 6da478f36d
commit e8cb357446
19 changed files with 700 additions and 64 deletions

View File

@@ -50,6 +50,7 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
implementation("de.hdodenhof:circleimageview:3.1.0")
// Retrofit
implementation("com.squareup.retrofit2:retrofit:2.9.0")
// Gson 转换器

View File

@@ -4,6 +4,10 @@
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-feature
android:name="android.hardware.camera"
@@ -19,6 +23,12 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.DefenseApplication">
<activity
android:name=".home.SetNameActivity"
android:exported="false" />
<activity
android:name=".home.AddFamilyActivity"
android:exported="false" />
<activity
android:name=".home.AddDeviceActivity"
android:exported="false" />

View File

@@ -0,0 +1,40 @@
package com.example.defenseapplication.adapter
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.defenseapplication.R
data class Device(
val name: String,
val icon: String
)
class AddDeviceAdapter(private val devices: List<Device>, private val onItemClick: (Device) -> Unit) :
RecyclerView.Adapter<AddDeviceAdapter.ViewHolder>() {
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val ivIcon: ImageView = itemView.findViewById(R.id.ivDeviceIcon2)
val tvName: TextView = itemView.findViewById(R.id.tvDeviceName2) // 注意ID 要和布局中一致
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_device2, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val device = devices[position]
holder.tvName.text = device.name
// 根据 icon 字符串加载对应图片(假设 icon 是本地 drawable 的名称)
val resId = holder.itemView.context.resources.getIdentifier(device.icon, "drawable", holder.itemView.context.packageName)
if (resId != 0) holder.ivIcon.setImageResource(resId) else holder.ivIcon.setImageResource(R.drawable.img)
// 设置点击事件
holder.itemView.setOnClickListener { onItemClick(device) }
}
override fun getItemCount(): Int = devices.size
}

View File

@@ -40,11 +40,11 @@ class DeviceAdapter(
fun bind(item: DeviceUi) {
binding.tvDeviceName.text = item.name
if (item.isOnline) {
binding.tvDeviceStatus.text = "\u25CF 正在运行"
binding.tvDeviceStatus.setTextColor(binding.root.context.getColor(R.color.green))
binding.tvDeviceName.text = "\u25CF 正在运行"
binding.tvDeviceName.setTextColor(binding.root.context.getColor(R.color.green))
} else {
binding.tvDeviceStatus.text = "\u25CF 离线"
binding.tvDeviceStatus.setTextColor(binding.root.context.getColor(R.color.red))
binding.tvDeviceName.text = "\u25CF 离线"
binding.tvDeviceName.setTextColor(binding.root.context.getColor(R.color.red))
}
binding.root.setOnClickListener {
onItemClick(item)

View File

@@ -1,21 +1,52 @@
package com.example.defenseapplication.home
import android.content.Intent
import android.os.Bundle
import androidx.activity.enableEdgeToEdge
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.example.defenseapplication.R
import androidx.recyclerview.widget.GridLayoutManager
import com.example.defenseapplication.adapter.AddDeviceAdapter
import com.example.defenseapplication.adapter.Device
import com.example.defenseapplication.databinding.AddDeviceActivityBinding
class AddDeviceActivity : AppCompatActivity() {
private lateinit var binding: AddDeviceActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.add_device_activity)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
binding = AddDeviceActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.ivBack.setOnClickListener {
finish()
}
setupDeviceList()
}
private fun setupDeviceList() {
val devices = listOf(
Device("智能挂式防御机", "device1"),
Device("智能防御机", "device2")
)
if (devices.isEmpty()) {
binding.emptyState.visibility = View.VISIBLE
binding.rvDevices.visibility = View.GONE
} else {
binding.emptyState.visibility = View.GONE
binding.rvDevices.visibility = View.VISIBLE
binding.rvDevices.layoutManager = GridLayoutManager(this, 2)
// 传入点击回调
binding.rvDevices.adapter = AddDeviceAdapter(devices) { device ->
// 跳转到 AddFamilyActivity选择Wi-Fi页面
val intent = Intent(this, AddFamilyActivity::class.java)
intent.putExtra("device_name", device.name)
startActivity(intent)
}
}
}
}

View File

@@ -0,0 +1,158 @@
package com.example.defenseapplication.home
import android.Manifest
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageManager
import android.net.wifi.ScanResult
import android.net.wifi.WifiManager
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.view.Gravity
import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.PopupWindow
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.recyclerview.widget.LinearLayoutManager
import com.example.defenseapplication.R
import com.example.defenseapplication.adapter.WifiListAdapter
import com.example.defenseapplication.databinding.AddFamilyActivityBinding
import com.example.defenseapplication.databinding.DialogWifiListBinding
class AddFamilyActivity : AppCompatActivity() {
private lateinit var binding: AddFamilyActivityBinding
private lateinit var wifiManager: WifiManager
private lateinit var wifiScanReceiver: BroadcastReceiver
private var popupWindow: PopupWindow? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = AddFamilyActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.ivBack.setOnClickListener {
finish()
}
binding.btnSelectWifi.setOnClickListener {
showWifiListDialog()
}
binding.etWifiName.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
updateBottomButtonVisibility()
}
})
binding.btnConfirm.setOnClickListener {
// 确认添加设备逻辑
}
wifiManager = applicationContext.getSystemService(Context.WIFI_SERVICE) as WifiManager
wifiScanReceiver = object : BroadcastReceiver() {
override fun onReceive(context: Context, intent: Intent) {
val success = intent.getBooleanExtra(WifiManager.EXTRA_RESULTS_UPDATED, false)
if (success) {
updateWifiList()
}
}
}
val deviceName = intent.getStringExtra("device_name")
binding.btnConfirm.setOnClickListener {
val intent=Intent(this, SetNameActivity::class.java)
startActivity( intent)
}
}
private fun showWifiListDialog() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED ||
ActivityCompat.checkSelfPermission(this, Manifest.permission.CHANGE_WIFI_STATE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.CHANGE_WIFI_STATE),
1001)
return
}
if (!wifiManager.isWifiEnabled) {
wifiManager.isWifiEnabled = true
}
wifiManager.startScan()
val dialogBinding = DialogWifiListBinding.inflate(LayoutInflater.from(this))
popupWindow = PopupWindow(
dialogBinding.root,
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT
).apply {
isFocusable = true
setBackgroundDrawable(null)
setOnDismissListener {
binding.maskView.visibility = android.view.View.GONE
}
showAtLocation(window.decorView, Gravity.BOTTOM, 0, 0)
}
binding.maskView.visibility = android.view.View.VISIBLE
dialogBinding.rvWifiList.layoutManager = LinearLayoutManager(this@AddFamilyActivity)
val wifiList = getWifiList()
dialogBinding.rvWifiList.adapter = WifiListAdapter(wifiList) { wifiName ->
binding.etWifiName.setText(wifiName)
popupWindow?.dismiss()
}
}
private fun updateBottomButtonVisibility() {
val wifiName = binding.etWifiName.text.toString().trim()
binding.bottomButtonLayout.visibility =
if (wifiName.isNotEmpty()) android.view.View.VISIBLE else android.view.View.GONE
}
private fun getWifiList(): List<String> {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
return emptyList()
}
val results: List<ScanResult> = wifiManager.scanResults
return results.map { it.SSID }.distinct()
}
private fun updateWifiList() {
popupWindow?.contentView?.findViewById<androidx.recyclerview.widget.RecyclerView>(R.id.rvWifiList)?.let { recyclerView ->
val wifiList = getWifiList()
recyclerView.adapter = WifiListAdapter(wifiList) { wifiName ->
binding.etWifiName.setText(wifiName)
popupWindow?.dismiss()
}
}
}
override fun onStart() {
super.onStart()
val intentFilter = IntentFilter()
intentFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)
registerReceiver(wifiScanReceiver, intentFilter)
}
override fun onStop() {
super.onStop()
unregisterReceiver(wifiScanReceiver)
popupWindow?.dismiss()
}
}

View File

@@ -70,6 +70,14 @@ class HomeMenuFragment : Fragment() {
val intent = Intent(requireContext(), MessageActivity::class.java)
startActivity(intent)
}
binding.add.setOnClickListener {
val intent = Intent(requireContext(), AddDeviceActivity::class.java)
startActivity(intent)
}
binding.addFamily.setOnClickListener {
val intent = Intent(requireContext(), AddFamilyActivity::class.java)
startActivity(intent)
}
}
private fun initView() {

View File

@@ -0,0 +1,25 @@
package com.example.defenseapplication.home
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.defenseapplication.databinding.SetNameActivityBinding
class SetNameActivity : AppCompatActivity() {
private lateinit var binding: SetNameActivityBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = SetNameActivityBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.ivBack.setOnClickListener {
finish()
}
binding.btnConfirm.setOnClickListener {
val deviceName = binding.etName.text.toString().trim()
finish()
}
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 527 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 992 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 836 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

View File

@@ -5,6 +5,127 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".home.AddDeviceActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/topBar"
android:layout_width="0dp"
android:layout_height="56dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/ivBack"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:src="@mipmap/back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="添加设备"
android:textColor="@color/black"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/contentLayout"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:background="@drawable/bg_white"
android:orientation="vertical"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/topBar">
<TextView
android:id="@+id/tvScanTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="扫描附近设备"
android:textColor="@color/black"
android:textSize="16dp"
android:textStyle="bold" />
<TextView
android:id="@+id/tvScanSubtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="持续自动搜索中..."
android:textColor="@color/gray"
android:textSize="14dp" />
<FrameLayout
android:id="@+id/deviceContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp">
<LinearLayout
android:id="@+id/emptyState"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/ivEmpty"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/add_d" />
<TextView
android:id="@+id/tvEmptyHint"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="请将手机尽量靠近要添加的设备"
android:textColor="@color/gray"
android:textSize="14dp" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rvDevices"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="gone"
android:orientation="horizontal"/>
</FrameLayout>
</LinearLayout>
<android.widget.Button
android:id="@+id/btnScanAdd"
android:layout_width="0dp"
android:layout_height="40dp"
android:layout_marginStart="16dp"
android:layout_marginTop="16dp"
android:layout_marginEnd="16dp"
android:layout_marginBottom="16dp"
android:background="@drawable/rounded_blue_bg"
android:text="扫描添加"
android:textColor="@color/white"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/contentLayout" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,141 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
tools:context=".home.AddFamilyActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/topBar"
android:layout_width="match_parent"
android:layout_height="56dp">
<ImageView
android:id="@+id/ivBack"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:src="@drawable/back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="选择Wi-Fi"
android:textColor="@color/black"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<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="48dp"
android:background="@drawable/textinput_white_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_wifi" />
<EditText
android:id="@+id/etWifiName"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_weight="1"
android:background="@null"
android:hint="请输入WiFi名称"
android:textColor="@color/black"
android:textSize="16sp" />
<android.widget.Button
android:id="@+id/btnSelectWifi"
android:layout_width="wrap_content"
android:layout_height="32dp"
android:layout_marginStart="12dp"
android:background="@drawable/rounded_blue_bg"
android:text="选择Wi-Fi"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="12dp"
android:background="@drawable/textinput_white_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:src="@drawable/ic_lock" />
<EditText
android:id="@+id/etWifiPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:background="@null"
android:hint="请输入WiFi密码"
android:inputType="textPassword"
android:textColor="@color/black"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
<View
android:id="@+id/maskView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:visibility="gone" />
<LinearLayout
android:id="@+id/bottomButtonLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical"
android:padding="16dp"
android:visibility="gone">
<android.widget.Button
android:id="@+id/btnConfirm"
android:layout_width="match_parent"
android:layout_height="40dp"
android:background="@drawable/rounded_blue_bg"
android:text="下一步"
android:textColor="@color/white"
android:textSize="16dp"
android:textStyle="bold" />
</LinearLayout>
</RelativeLayout>

View File

@@ -77,6 +77,7 @@
</FrameLayout>
<FrameLayout
android:id="@+id/add_family"
android:layout_width="38dp"
android:layout_height="38dp"
android:layout_marginEnd="10dp"
@@ -90,6 +91,7 @@
</FrameLayout>
<FrameLayout
android:id="@+id/add"
android:layout_width="38dp"
android:layout_height="38dp"
android:background="@drawable/bg_home_top_icon_green"

View File

@@ -2,60 +2,49 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="12dp"
android:background="@drawable/textinput_white_bg"
android:gravity="center_vertical"
android:gravity="center"
android:orientation="vertical"
android:paddingStart="20dp"
android:paddingEnd="20dp"
android:paddingTop="4dp"
android:paddingBottom="16dp">
android:background="@drawable/bg_white"
android:layout_marginBottom="14dp"
android:layout_gravity="center_horizontal"
android:padding="8dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<ImageView
android:id="@+id/ivDeviceIcon"
android:layout_width="54dp"
android:layout_height="54dp"
android:src="@drawable/ic_launcher_background"/>
<View
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="1"/>
android:layout_height="80dp"
android:layout_weight="1"
android:scaleType="centerInside"
android:src="@mipmap/ic_launcher_round" />
<ImageView
android:layout_marginEnd="20dp"
android:layout_gravity="center_vertical"
android:id="@+id/ivEnter"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/enter_icon"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
android:src="@drawable/go_up" />
</LinearLayout>
<TextView
android:id="@+id/tvDeviceType"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:textColor="@color/black"
android:textSize="12dp" />
<TextView
android:id="@+id/tvDeviceName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:textSize="16dp"
android:text="智能挂式防御机1"
android:textStyle="bold" />
<TextView
android:id="@+id/tvDeviceStatus"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/gray"
android:text="正在运行1"
android:textColor="@color/black"
android:textSize="12dp" />
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,24 @@
<?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:gravity="center"
android:orientation="vertical"
android:padding="8dp">
<ImageView
android:id="@+id/ivDeviceIcon2"
android:layout_width="80dp"
android:layout_height="80dp"
android:scaleType="centerInside"
android:src="@mipmap/ic_launcher_round" />
<TextView
android:id="@+id/tvDeviceName2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/black"
android:textSize="17dp" />
</LinearLayout>

View File

@@ -5,7 +5,7 @@
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/message_bg"
android:background="@color/white"
android:orientation="vertical"
tools:context=".personal.PersonalProfileActivity">
@@ -47,22 +47,20 @@
android:id="@+id/ivAvatar"
android:layout_width="112dp"
android:layout_height="112dp"
android:padding="2dp"
android:src="@mipmap/ic_launcher_round" />
android:src="@mipmap/ic_launcher_round"/>
<RelativeLayout
android:gravity="center"
android:layout_width="33dp"
android:layout_height="33dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/ivAvatar"
android:layout_alignEnd="@id/ivAvatar"
android:layout_marginBottom="5dp"
android:background="@drawable/bg_white"
android:layout_marginEnd="12dp">
android:layout_marginEnd="5dp">
<ImageView
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_width="33dp"
android:layout_height="33dp"
android:background="@drawable/bg_white"
android:padding="8dp"
android:src="@drawable/phone"/>
</RelativeLayout>
@@ -78,6 +76,7 @@
android:id="@+id/itemNickname"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="@color/white"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
@@ -120,6 +119,7 @@
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="8dp"
android:background="@color/white"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp">
@@ -132,7 +132,7 @@
android:textSize="16dp" />
<LinearLayout
android:layout_width="0dp"
android:layout_width="279dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="end|center_vertical"

View File

@@ -0,0 +1,86 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/message_bg"
android:orientation="vertical"
tools:context=".home.SetNameActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/topBar"
android:layout_width="match_parent"
android:layout_height="56dp">
<ImageView
android:id="@+id/ivBack"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:src="@drawable/back"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名字"
android:textColor="@color/black"
android:textSize="16dp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:id="@+id/tvLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="设置名字"
android:textColor="@color/black"
android:textSize="16dp" />
<EditText
android:id="@+id/etName"
android:layout_width="match_parent"
android:layout_height="48dp"
android:layout_marginTop="12dp"
android:background="@drawable/textinput_white_bg"
android:hint="请输入设备名称"
android:paddingHorizontal="16dp"
android:text="智能防御机A1"
android:textColor="@color/black"
android:textSize="14dp" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<android.widget.Button
android:id="@+id/btnConfirm"
android:layout_width="match_parent"
android:layout_height="48dp"
android:background="@drawable/rounded_blue_bg"
android:text="完成"
android:textColor="@color/white"
android:textSize="16dp"
android:textStyle="bold" />
</LinearLayout>
</LinearLayout>