diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt index 354ee87..159f4b9 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/base/BaseActivity.kt @@ -1,14 +1,22 @@ package com.yinuo.safetywatcher.watcher.base +import android.content.Context import android.os.Bundle +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.LayoutInflater.Factory2 import android.view.View import android.view.ViewGroup +import android.widget.LinearLayout import android.widget.RelativeLayout +import android.widget.TextView import androidx.appcompat.app.AppCompatActivity import com.yinuo.safetywatcher.R import com.yinuo.safetywatcher.databinding.ActivityBaseBinding +import com.yinuo.safetywatcher.watcher.constant.NAMESPACE_ANDROID import com.yinuo.safetywatcher.watcher.ui.view.CommonDialog import com.yinuo.safetywatcher.watcher.ui.view.CommonTopBar +import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg abstract class BaseActivity : AppCompatActivity() { @@ -19,6 +27,7 @@ abstract class BaseActivity : AppCompatActivity() { var loadingDialog: CommonDialog? = null; override fun onCreate(savedInstanceState: Bundle?) { + setViewFactory() super.onCreate(savedInstanceState) setContentView(baseBinding.root) setChildContent() @@ -77,4 +86,39 @@ abstract class BaseActivity : AppCompatActivity() { abstract fun generateContentView(): View abstract fun initView() + + private fun setViewFactory() { + val inflater = LayoutInflater.from(this) + inflater.factory2 = object : Factory2 { + override fun onCreateView( + parent: View?, + name: String, + context: Context, + attrs: AttributeSet + ): View? { + val booleanValue = + attrs.getAttributeBooleanValue(NAMESPACE_ANDROID, "focusable", false) + var view: View? = null + if (booleanValue) { + view = tryCreateView(name, context, attrs) + view?.trySetCommonBg() + } + return view + } + + override fun onCreateView(name: String, context: Context, attrs: AttributeSet): View? { + return onCreateView(null, name, context, attrs) + } + } + } + + private fun tryCreateView(name: String, context: Context, attrs: AttributeSet): View? { + return when (name) { + "LinearLayout" -> LinearLayout(context, attrs) + "TextView" -> TextView(context, attrs) + else -> { + null + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt index e2005f1..fb96dfc 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/constant/Constants.kt @@ -16,4 +16,6 @@ const val CAMERA_URL = "rtsp://admin:123456@192.168.5.200:554/h264/ch1/main/av_s const val DELAY_TIME_OPEN_CAMERA = 10 //检测重连摄像头延时 -const val DELAY_TIME_CHECK_CAMERA = 5 \ No newline at end of file +const val DELAY_TIME_CHECK_CAMERA = 5 + +const val NAMESPACE_ANDROID = "http://schemas.android.com/apk/res/android" \ No newline at end of file diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt index 3590437..30f1a5f 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/ui/view/CommonTopBar.kt @@ -18,6 +18,7 @@ import com.yinuo.safetywatcher.databinding.LayoutTopbarBinding import com.yinuo.safetywatcher.watcher.utils.BatteryHelper import com.yinuo.safetywatcher.watcher.utils.SimHelper import com.yinuo.safetywatcher.watcher.utils.WifiHelper +import com.yinuo.safetywatcher.watcher.utils.trySetCommonBg class CommonTopBar : LinearLayout { constructor(context: Context?) : this(context, null) @@ -142,8 +143,10 @@ class CommonTopBar : LinearLayout { opView.setTextColor(Color.WHITE) opView.setTextSize(TypedValue.COMPLEX_UNIT_PX, 30f) opView.tag = option.type + opView.focusable = FOCUSABLE opView.background = AppCompatResources.getDrawable(context, R.mipmap.op_bg) opView.setOnClickListener(opClickListener) + opView.trySetCommonBg() mBinding?.opsContainer?.addView(opView, opLayoutParams) if (index != list.size - 1) { mBinding?.opsContainer?.addView(Space(context), opSpaceLayoutParams) diff --git a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt index ba0fef4..d5d1383 100644 --- a/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt +++ b/app/src/main/java/com/yinuo/safetywatcher/watcher/utils/Exts.kt @@ -1,9 +1,26 @@ package com.yinuo.safetywatcher.watcher.utils +import android.R import android.content.Context +import android.graphics.Color +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.StateListDrawable +import android.view.View import android.widget.Toast import com.yinuo.safetywatcher.watcher.ui.view.CommonToast fun Context.showToast(msg: String) { CommonToast(this).makeCommonText(this, msg, Toast.LENGTH_SHORT).show() +} + +private val focusableStateKey: IntArray = intArrayOf(R.attr.state_focused) +fun View?.trySetCommonBg() { + this?.apply { + val bg = StateListDrawable() + val currentBackground = this.background + val drawable = ColorDrawable(Color.RED) + bg.addState(focusableStateKey, drawable) + bg.addState(intArrayOf(), currentBackground) + this.background = bg + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_cloud.xml b/app/src/main/res/layout/activity_cloud.xml index 3af4e28..b6bbd68 100644 --- a/app/src/main/res/layout/activity_cloud.xml +++ b/app/src/main/res/layout/activity_cloud.xml @@ -11,6 +11,8 @@ android:layout_height="@dimen/_100dp" android:background="@drawable/cloud_sync_btn_bg" android:gravity="center" + android:focusedByDefault="true" + android:focusable="true" android:text="@string/sync_sensor_txt" android:textColor="@color/white" android:textSize="@dimen/_30dp" /> @@ -33,6 +35,7 @@ android:layout_marginTop="@dimen/_50dp" android:background="@drawable/cloud_sync_btn_bg" android:gravity="center" + android:focusable="true" android:text="@string/sync_video_txt" android:textColor="@color/white" android:textSize="@dimen/_30dp" /> @@ -44,6 +47,7 @@ android:layout_marginTop="@dimen/_50dp" android:background="@drawable/cloud_sync_btn_bg" android:gravity="center" + android:focusable="true" android:text="@string/sync_once_txt" android:textColor="@color/white" android:textSize="@dimen/_30dp" /> diff --git a/app/src/main/res/layout/activity_history_video.xml b/app/src/main/res/layout/activity_history_video.xml index a2344f3..c52d525 100644 --- a/app/src/main/res/layout/activity_history_video.xml +++ b/app/src/main/res/layout/activity_history_video.xml @@ -25,6 +25,7 @@ android:background="@drawable/save_btn_bg" android:paddingHorizontal="@dimen/_18dp" android:paddingVertical="@dimen/_12dp" + android:focusable="true" android:text="@string/modify_params" android:textColor="@color/white" android:textSize="@dimen/_32dp" /> diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 1d58fa7..e5c39b4 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -26,6 +26,7 @@ android:gravity="center_vertical" android:orientation="horizontal" android:focusedByDefault="true" + android:focusable="true" android:nextFocusDown="@id/item_query" android:paddingStart="@dimen/_66dp"> @@ -49,6 +50,7 @@ android:layout_height="@dimen/_88dp" android:gravity="center_vertical" android:orientation="horizontal" + android:focusable="true" android:paddingStart="@dimen/_66dp"> @@ -92,6 +95,7 @@ android:id="@+id/item_recovery" android:layout_width="match_parent" android:layout_height="@dimen/_88dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_66dp"> @@ -113,6 +117,7 @@ diff --git a/app/src/main/res/layout/activity_light_setting.xml b/app/src/main/res/layout/activity_light_setting.xml index 8f85436..61edfdb 100644 --- a/app/src/main/res/layout/activity_light_setting.xml +++ b/app/src/main/res/layout/activity_light_setting.xml @@ -42,6 +42,7 @@ android:background="@drawable/cancel_btn_bg" android:gravity="center" android:text="@string/cancel" + android:focusable="true" android:textColor="@color/white_30" android:textSize="@dimen/_36dp" /> @@ -54,6 +55,7 @@ android:background="@drawable/confirm_btn_bg" android:gravity="center" android:text="@string/confirm" + android:focusable="true" android:textColor="@color/white" android:textSize="@dimen/_36dp" /> diff --git a/app/src/main/res/layout/activity_net_setting.xml b/app/src/main/res/layout/activity_net_setting.xml index 1f44f87..4b283aa 100644 --- a/app/src/main/res/layout/activity_net_setting.xml +++ b/app/src/main/res/layout/activity_net_setting.xml @@ -40,6 +40,7 @@ android:layout_height="@dimen/_108dp" android:gravity="center_vertical" android:orientation="horizontal" + android:focusable="true" android:paddingStart="@dimen/_121dp"> diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 7d01ed3..f35ed09 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -12,6 +12,7 @@ android:layout_height="@dimen/_108dp" android:gravity="center_vertical" android:orientation="horizontal" + android:focusable="true" android:paddingStart="@dimen/_121dp"> @@ -64,6 +66,7 @@ android:id="@+id/item_query" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -91,6 +94,7 @@ android:id="@+id/item_wraning" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -118,6 +122,7 @@ android:id="@+id/item_video" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -145,6 +150,7 @@ android:id="@+id/item_sensor" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -172,6 +178,7 @@ android:id="@+id/item_cloud" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -199,6 +206,7 @@ android:id="@+id/item_net" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> @@ -226,6 +234,7 @@ android:id="@+id/item_recovery" android:layout_width="match_parent" android:layout_height="@dimen/_108dp" + android:focusable="true" android:gravity="center_vertical" android:orientation="horizontal" android:paddingStart="@dimen/_121dp"> diff --git a/app/src/main/res/layout/activity_time_setting.xml b/app/src/main/res/layout/activity_time_setting.xml index 08fa082..60ff18f 100644 --- a/app/src/main/res/layout/activity_time_setting.xml +++ b/app/src/main/res/layout/activity_time_setting.xml @@ -77,6 +77,7 @@ android:text="@string/cancel" android:textColor="@color/white_30" android:textSize="@dimen/_36dp" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" /> @@ -91,6 +92,7 @@ android:text="@string/confirm" android:textColor="@color/white" android:textSize="@dimen/_36dp" + android:focusable="true" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" /> diff --git a/app/src/main/res/layout/activity_warndata.xml b/app/src/main/res/layout/activity_warndata.xml index bc4fa5b..8725d19 100644 --- a/app/src/main/res/layout/activity_warndata.xml +++ b/app/src/main/res/layout/activity_warndata.xml @@ -25,6 +25,7 @@ android:layout_marginStart="@dimen/_20dp" android:paddingVertical="@dimen/_12dp" android:paddingHorizontal="@dimen/_18dp" + android:focusable="true" android:textSize="@dimen/_32dp" android:textColor="@color/white" android:background="@drawable/save_btn_bg"/> diff --git a/app/src/main/res/layout/layout_topbar.xml b/app/src/main/res/layout/layout_topbar.xml index 7806f65..205ef7a 100644 --- a/app/src/main/res/layout/layout_topbar.xml +++ b/app/src/main/res/layout/layout_topbar.xml @@ -9,8 +9,9 @@