diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/BoneTabLayout.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/BoneTabLayout.kt index e5d0a1d665..86ce78be1c 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/BoneTabLayout.kt +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/BoneTabLayout.kt @@ -14,6 +14,7 @@ import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchCarInfo import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchMore import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchMsgBox import kotlinx.android.synthetic.main.view_bone_tab.view.tabSwitchReport +import kotlinx.android.synthetic.main.view_bone_tab.view.toolKitTabView import kotlin.properties.Delegates class BoneTabLayout @JvmOverloads constructor( @@ -129,11 +130,7 @@ class BoneTabLayout @JvmOverloads constructor( TabType.MORE_INFO -> { tabSwitchMore.switchTab(check) - if (check) { - - } else { - - } + toolKitTabView.visibility = if (check) VISIBLE else GONE } else -> {} diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ToolKitTabView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ToolKitTabView.kt new file mode 100644 index 0000000000..d77de2039f --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/tab/ToolKitTabView.kt @@ -0,0 +1,66 @@ +package com.mogo.eagle.core.function.hmi.bone.tab + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.recyclerview.widget.GridLayoutManager +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitBean +import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitDefaultItemView +import com.mogo.eagle.core.function.hmi.bone.toolkit.ToolKitListAdapter +import com.mogo.eagle.core.utilcode.mogo.view.GridSpacingItemDecoration +import kotlinx.android.synthetic.main.view_tool_kit_tab.view.recyclerView +import me.jessyan.autosize.utils.AutoSizeUtils +import java.lang.ref.WeakReference + +class ToolKitTabView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + companion object { + private const val TAG = "ToolKitTabView" + } + + val toolKitList = ArrayList()?.also { + List(20) { index -> + it += ToolKitBean( + ToolKitDefaultItemView(context).apply { + setData("标题标题标题标题标题$index", R.drawable.icon_toolkit_item_tiaoshi) + } + ) + } + } + + + init { + LayoutInflater.from(context).inflate(R.layout.view_tool_kit_tab, this, true) + initView() + } + + override fun onAttachedToWindow() { + super.onAttachedToWindow() + } + + override fun onDetachedFromWindow() { + super.onDetachedFromWindow() + } + + private fun initView() { + // 设置布局管理器为GridLayoutManager,每行3列 + recyclerView.layoutManager = GridLayoutManager(context, 3) + // 设置适配器 + recyclerView.adapter = ToolKitListAdapter(toolKitList) + recyclerView.addItemDecoration( + GridSpacingItemDecoration( + 3, + AutoSizeUtils.dp2px(context, 10f), + AutoSizeUtils.dp2px(context, 57f), + false + ) + ) + } + +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitBean.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitBean.kt new file mode 100644 index 0000000000..06190bf1e6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitBean.kt @@ -0,0 +1,5 @@ +package com.mogo.eagle.core.function.hmi.bone.toolkit + +import android.view.View + +data class ToolKitBean(val itemView: View) diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDefaultItemView.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDefaultItemView.kt new file mode 100644 index 0000000000..2d10ec4ff6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitDefaultItemView.kt @@ -0,0 +1,39 @@ +package com.mogo.eagle.core.function.hmi.bone.toolkit + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.content.ContextCompat +import com.mogo.eagle.core.function.hmi.R +import com.mogo.eagle.core.function.main.MainMoGoApplication +import kotlinx.android.synthetic.main.view_tool_kit_item_default.view.btnImageView +import kotlinx.android.synthetic.main.view_tool_kit_item_default.view.tvTitleView + +/** + * 默认的item view, 上下机构,上面是按钮icon图片,下面是 title标题 + */ +class ToolKitDefaultItemView @JvmOverloads constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + companion object { + private const val TAG = "ToolKitDefaultItemView" + } + + init { + LayoutInflater.from(context).inflate(R.layout.view_tool_kit_item_default, this, true) + } + + fun setData(title: String, iconDrawable: Int) { + tvTitleView.text = title + btnImageView.setImageDrawable( + ContextCompat.getDrawable( + MainMoGoApplication.getApp(), + iconDrawable + ) + ) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitListAdapter.kt b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitListAdapter.kt new file mode 100644 index 0000000000..952cc863f6 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/java/com/mogo/eagle/core/function/hmi/bone/toolkit/ToolKitListAdapter.kt @@ -0,0 +1,45 @@ +package com.mogo.eagle.core.function.hmi.bone.toolkit + +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import androidx.recyclerview.widget.RecyclerView +import com.mogo.eagle.core.function.hmi.R + +class ToolKitListAdapter(private val items: List) : + RecyclerView.Adapter() { + + class ToolKitListViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { + var containerView: FrameLayout = itemView.findViewById(R.id.container) + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { + val itemView = LayoutInflater.from(parent.context) + .inflate(R.layout.view_tool_kit_item, parent, false) + return ToolKitListViewHolder(itemView) + } + + override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { + when (holder) { + is ToolKitListViewHolder -> { + holder.containerView.removeAllViews() + val data = items[position] as ToolKitBean + kotlin.runCatching { + data?.itemView?.also { + if (it.parent != null) { + (it.parent as ViewGroup).removeView(it) + } + holder.containerView.addView(it) + } + } + } + } + } + + override fun getItemCount() = items.size + + override fun onViewRecycled(holder: RecyclerView.ViewHolder) { + super.onViewRecycled(holder) + } +} \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_toolkit_item_tiaoshi.png b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_toolkit_item_tiaoshi.png new file mode 100644 index 0000000000..bc30561b48 Binary files /dev/null and b/core/function-impl/mogo-core-function-hmi/src/main/res/drawable-xhdpi/icon_toolkit_item_tiaoshi.png differ diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_bone_tab.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_bone_tab.xml index 63bb5539dc..a188b8280a 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_bone_tab.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_bone_tab.xml @@ -21,6 +21,16 @@ app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_item_default.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_item_default.xml new file mode 100644 index 0000000000..41ec5a6614 --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_item_default.xml @@ -0,0 +1,34 @@ + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_tab.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_tab.xml new file mode 100644 index 0000000000..639e155f8c --- /dev/null +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/layout/view_tool_kit_tab.xml @@ -0,0 +1,42 @@ + + + + + + + + + \ No newline at end of file diff --git a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml index c1aa415cc0..85ef34f995 100644 --- a/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml +++ b/core/function-impl/mogo-core-function-hmi/src/main/res/values/strings.xml @@ -3,6 +3,7 @@ 查看 我的车辆 + 更多内容 登陆信息 退出 车辆绑定 diff --git a/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/view/GridSpacingItemDecoration.java b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/view/GridSpacingItemDecoration.java new file mode 100644 index 0000000000..e69e2e4d17 --- /dev/null +++ b/core/mogo-core-utils/src/main/java/com/mogo/eagle/core/utilcode/mogo/view/GridSpacingItemDecoration.java @@ -0,0 +1,43 @@ +package com.mogo.eagle.core.utilcode.mogo.view; + +import android.graphics.Rect; +import android.view.View; + +import androidx.recyclerview.widget.RecyclerView; + +public class GridSpacingItemDecoration extends RecyclerView.ItemDecoration { + + private int spanCount; + private int horizontalSpacing; // 水平间距 + private int verticalSpacing; // 垂直间距 + private boolean includeEdge; + + public GridSpacingItemDecoration(int spanCount, int horizontalSpacing, int verticalSpacing, boolean includeEdge) { + this.spanCount = spanCount; + this.horizontalSpacing = horizontalSpacing; + this.verticalSpacing = verticalSpacing; + this.includeEdge = includeEdge; + } + + @Override + public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { + int position = parent.getChildAdapterPosition(view); // item position + int column = position % spanCount; // item column + + if (includeEdge) { + outRect.left = horizontalSpacing - column * horizontalSpacing / spanCount; + outRect.right = (column + 1) * horizontalSpacing / spanCount; + + if (position < spanCount) { // top edge + outRect.top = verticalSpacing; + } + outRect.bottom = verticalSpacing; // item bottom + } else { + outRect.left = column * horizontalSpacing / spanCount; + outRect.right = horizontalSpacing - (column + 1) * horizontalSpacing / spanCount; + if (position >= spanCount) { + outRect.top = verticalSpacing; // item top + } + } + } +}