home
parent
1857cdb0b8
commit
732932ec75
|
@ -1,6 +1,6 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
xmlns:tools="http://schemas.android.com/tools" >
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
|
@ -11,19 +11,20 @@
|
|||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Android_ulsService"
|
||||
tools:targetApi="31">
|
||||
|
||||
tools:targetApi="31" >
|
||||
<activity
|
||||
android:name=".module.home.MainActivity"
|
||||
android:exported="true"
|
||||
android:label="@string/app_name">
|
||||
android:name=".module.wecome.WecomeActivity"
|
||||
android:exported="true" >
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity
|
||||
android:name=".module.home.MainActivity"
|
||||
android:launchMode="singleTask">
|
||||
</activity>
|
||||
<activity
|
||||
android:name=".module.test.FuncListActivity"
|
||||
android:exported="false" />
|
||||
|
|
|
@ -19,18 +19,5 @@ class MainActivity : AppCompatActivity() {
|
|||
|
||||
binding = ActivityMainBinding.inflate(layoutInflater)
|
||||
setContentView(binding.root)
|
||||
|
||||
val navView: BottomNavigationView = binding.navView
|
||||
|
||||
val navController = findNavController(R.id.nav_host_fragment_activity_main)
|
||||
// Passing each menu ID as a set of Ids because each
|
||||
// menu should be considered as top level destinations.
|
||||
val appBarConfiguration = AppBarConfiguration(
|
||||
setOf(
|
||||
R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications
|
||||
)
|
||||
)
|
||||
setupActionBarWithNavController(navController, appBarConfiguration)
|
||||
navView.setupWithNavController(navController)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
package com.uls.service.module.home.view
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Color
|
||||
import android.graphics.drawable.GradientDrawable
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.widget.LinearLayout
|
||||
import com.uls.service.databinding.HomeItemViewBinding
|
||||
import com.util.extension.dp
|
||||
import com.util.extension.roundCorner
|
||||
|
||||
/**
|
||||
Created by yanzs on 2023/11/14
|
||||
*/
|
||||
class HomeItemView @JvmOverloads constructor(
|
||||
context: Context, attrs: AttributeSet? = null
|
||||
) : LinearLayout(context, attrs) {
|
||||
private var binding = HomeItemViewBinding.inflate(LayoutInflater.from(context), this, true)
|
||||
|
||||
init {
|
||||
roundCorner(30.dp)
|
||||
background = GradientDrawable(
|
||||
GradientDrawable.Orientation.LEFT_RIGHT,
|
||||
intArrayOf(Color.parseColor("#ff36C1C8"), Color.parseColor("#ff37D1D9"))
|
||||
)
|
||||
}
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.uls.service.module.wecome
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import android.os.Bundle
|
||||
import com.uls.service.R
|
||||
import com.uls.service.module.home.MainActivity
|
||||
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
|
||||
import io.reactivex.rxjava3.core.Flowable
|
||||
import java.util.concurrent.TimeUnit
|
||||
|
||||
class WecomeActivity : AppCompatActivity() {
|
||||
@SuppressLint("CheckResult")
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_wecome)
|
||||
Flowable.timer(300,TimeUnit.MILLISECONDS)
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe {
|
||||
finish()
|
||||
startActivity(Intent(this,MainActivity::class.java))
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,33 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:id="@+id/container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingTop="?attr/actionBarSize">
|
||||
|
||||
<com.google.android.material.bottomnavigation.BottomNavigationView
|
||||
android:id="@+id/nav_view"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="0dp"
|
||||
android:layout_marginEnd="0dp"
|
||||
android:background="?android:attr/windowBackground"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:menu="@menu/bottom_nav_menu" />
|
||||
|
||||
<fragment
|
||||
android:id="@+id/nav_host_fragment_activity_main"
|
||||
android:name="androidx.navigation.fragment.NavHostFragment"
|
||||
android:orientation="horizontal">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:defaultNavHost="true"
|
||||
app:layout_constraintBottom_toTopOf="@id/nav_view"
|
||||
app:layout_constraintLeft_toLeftOf="parent"
|
||||
app:layout_constraintRight_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:navGraph="@navigation/mobile_navigation" />
|
||||
android:orientation="horizontal"
|
||||
>
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical"
|
||||
>
|
||||
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -0,0 +1,33 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.appcompat.widget.LinearLayoutCompat
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:gravity="center"
|
||||
tools:context=".module.wecome.WecomeActivity">
|
||||
<RelativeLayout
|
||||
android:layout_width="466dp"
|
||||
android:layout_height="466dp">
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:src="@mipmap/wecom_logo"
|
||||
/>
|
||||
<TextView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textColor="#ff3D3D3D"
|
||||
android:textSize="80sp"
|
||||
android:text="尤岚氏机器人"
|
||||
android:layout_centerHorizontal="true"
|
||||
android:layout_alignParentBottom="true"
|
||||
/>
|
||||
</RelativeLayout>
|
||||
<ImageView
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@mipmap/wecom_logo_subtitle"
|
||||
/>
|
||||
</androidx.appcompat.widget.LinearLayoutCompat>
|
|
@ -0,0 +1,37 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="horizontal"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="#36C1C8"
|
||||
android:padding="12dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="90dp"
|
||||
android:layout_height="90dp"/>
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="match_parent"
|
||||
android:orientation="vertical"
|
||||
android:layout_weight="1">
|
||||
<TextView
|
||||
android:id="@+id/tv_title"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="家庭医生"
|
||||
android:textColor="#FFFFFF"
|
||||
android:textSize="38sp"
|
||||
/>
|
||||
|
||||
<TextView
|
||||
android:id="@+id/tv_subtitle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:textSize="26sp"
|
||||
android:textColor="#FFFFFF"
|
||||
android:text="专家坐诊,线上咨询"
|
||||
/>
|
||||
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
Binary file not shown.
After Width: | Height: | Size: 232 KiB |
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
Binary file not shown.
After Width: | Height: | Size: 22 KiB |
|
@ -12,5 +12,6 @@
|
|||
<!-- Status bar color. -->
|
||||
<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="android:screenOrientation">landscape</item>
|
||||
</style>
|
||||
</resources>
|
|
@ -32,7 +32,7 @@ android {
|
|||
|
||||
dependencies {
|
||||
|
||||
api project(":uikit")
|
||||
api project(":util")
|
||||
api androidxLibs.bundles.androidx
|
||||
api googleLibs.material
|
||||
|
||||
|
|
|
@ -39,5 +39,6 @@ dependencies {
|
|||
api 'com.squareup.retrofit2:adapter-rxjava3:2.9.0'
|
||||
api 'com.squareup.retrofit2:converter-gson:2.9.0'
|
||||
api 'com.squareup.okhttp3:okhttp:4.2.2'
|
||||
api 'com.ljx.rxlife3:rxlife-rxjava:3.0.0'
|
||||
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
package com.util.extension
|
||||
|
||||
import android.content.res.Resources
|
||||
|
||||
|
||||
// see https://github.com/nitrico/kema/blob/master/kema/src/main/java/com/github/nitrico/kema/Conversions.kt
|
||||
|
||||
// dp to pixels
|
||||
val Int.dp: Int get() = (this * Resources.getSystem().displayMetrics.density + 0.5f).toInt()
|
||||
|
||||
// float dp to pixels
|
||||
val Float.dp: Float get() = (this * Resources.getSystem().displayMetrics.density + 0.5f)
|
||||
|
||||
val Int.sp: Int get() = (this * Resources.getSystem().displayMetrics.scaledDensity + 0.5f).toInt()
|
||||
|
||||
val Float.sp: Float get() = (this * Resources.getSystem().displayMetrics.scaledDensity + 0.5f)
|
||||
|
||||
|
||||
// integer to float
|
||||
val Int.f: Float get() = toFloat()
|
||||
|
||||
// integer to double
|
||||
val Int.d: Double get() = toDouble()
|
||||
|
||||
// float to integer
|
||||
val Float.i: Int get() = toInt()
|
||||
|
||||
// double to integer
|
||||
val Double.i: Int get() = toInt()
|
|
@ -0,0 +1,155 @@
|
|||
package com.util.extension
|
||||
|
||||
|
||||
import android.graphics.Outline
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
import android.text.Editable
|
||||
import android.text.TextWatcher
|
||||
import android.view.View
|
||||
import android.view.ViewOutlineProvider
|
||||
import android.widget.EditText
|
||||
import android.widget.TextView
|
||||
import kotlin.math.abs
|
||||
|
||||
|
||||
fun View.visible() {
|
||||
visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
fun View.invisible() {
|
||||
visibility = View.INVISIBLE
|
||||
}
|
||||
|
||||
fun View.gone() {
|
||||
visibility = View.GONE
|
||||
}
|
||||
|
||||
fun View.setVisible(isVisible: Boolean) {
|
||||
visibility = if (isVisible) {
|
||||
View.VISIBLE
|
||||
} else {
|
||||
View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置防抖动的点击事件
|
||||
*
|
||||
* @param intervalInMillis 防抖动阈值,默认800ms
|
||||
*/
|
||||
fun View.setOnThrottledClickListener(
|
||||
intervalInMillis: Long = 800L,
|
||||
action: (View) -> Unit
|
||||
) {
|
||||
setOnClickListener(
|
||||
object : View.OnClickListener {
|
||||
private var lastClickedTimeInMillis: Long = 0
|
||||
|
||||
override fun onClick(v: View) {
|
||||
if (abs(System.currentTimeMillis() - lastClickedTimeInMillis) >= intervalInMillis) {
|
||||
lastClickedTimeInMillis = System.currentTimeMillis()
|
||||
action.invoke(v)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* 用于让类继承,在onClick方法中统一用view.id区分
|
||||
*/
|
||||
fun View.setOnThrottledClickListener(
|
||||
onThrottledClickListener: OnThrottledClickListener,
|
||||
intervalInMillis: Long = 800L
|
||||
) {
|
||||
setOnClickListener(
|
||||
object : View.OnClickListener {
|
||||
private var lastClickedTimeInMillis: Long = 0
|
||||
|
||||
override fun onClick(v: View) {
|
||||
if (abs(System.currentTimeMillis() - lastClickedTimeInMillis) >= intervalInMillis) {
|
||||
onThrottledClickListener.onClick(v)
|
||||
lastClickedTimeInMillis = System.currentTimeMillis()
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
fun TextView.setOnDebouncedAfterTextChanged(
|
||||
intervalInMillis: Long = 200L,
|
||||
onAfterChanged: (text: Editable?) -> Unit
|
||||
) {
|
||||
this.addTextChangedListener(object : TextWatcher {
|
||||
val handler = Handler(Looper.getMainLooper())
|
||||
var runnable: Runnable? = null
|
||||
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
|
||||
|
||||
}
|
||||
|
||||
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
|
||||
runnable?.let {
|
||||
handler.removeCallbacks(it)
|
||||
}
|
||||
}
|
||||
|
||||
override fun afterTextChanged(s: Editable?) {
|
||||
runnable = Runnable {
|
||||
onAfterChanged(s)
|
||||
}.also {
|
||||
handler.postDelayed(it, intervalInMillis)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
|
||||
var EditText.trimText: String?
|
||||
set(value) {
|
||||
this.setText(value)//设置的数据不处理
|
||||
}
|
||||
get() {
|
||||
return this.text.toString().trim()
|
||||
}
|
||||
|
||||
interface OnThrottledClickListener {
|
||||
fun onClick(v: View)
|
||||
}
|
||||
|
||||
|
||||
fun View.roundCorner(
|
||||
round: Int
|
||||
) {
|
||||
outlineProvider = object : ViewOutlineProvider() {
|
||||
override fun getOutline(view: View, outline: Outline) {
|
||||
outline.setRoundRect(0, 0, view.width, view.height, round.toFloat())
|
||||
}
|
||||
}
|
||||
clipToOutline = true
|
||||
}
|
||||
|
||||
fun View.roundTopCorner(
|
||||
round: Int
|
||||
) {
|
||||
outlineProvider = object : ViewOutlineProvider() {
|
||||
override fun getOutline(view: View, outline: Outline) {
|
||||
outline.setRoundRect(0, 0, view.width, view.height + round, round.toFloat())
|
||||
}
|
||||
}
|
||||
clipToOutline = true
|
||||
}
|
||||
fun View.roundBottomCorner(
|
||||
radius: Int
|
||||
) {
|
||||
outlineProvider = object : ViewOutlineProvider() {
|
||||
override fun getOutline(view: View, outline: Outline) {
|
||||
outline.setRoundRect(0, -radius, view.width, view.height, radius.toFloat())
|
||||
}
|
||||
}
|
||||
clipToOutline = true
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue