font, maxnum 自定义控件

This commit is contained in:
renhaoting 2025-10-28 18:06:35 +08:00
parent 94467ea83b
commit 9b71247893
13 changed files with 261 additions and 49 deletions

View File

@ -0,0 +1,50 @@
package com.remax.visualnovel.ui.chat.ui
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import com.remax.visualnovel.databinding.LayoutFontSetViewBinding
class FontSetView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
companion object {
private var GAP = 1
}
private var mBinding: LayoutFontSetViewBinding
private var mFontValue = 20
init {
mBinding = LayoutFontSetViewBinding.inflate(LayoutInflater.from(context), this, true)
setupClickListeners()
}
private fun setupClickListeners() {
with (mBinding) {
ivFontPlus.setOnClickListener {
mFontValue -= GAP
tvFontValue.text = mFontValue.toString()
}
ivFontAdd.setOnClickListener {
mFontValue += GAP
tvFontValue.text = mFontValue.toString()
}
}
}
}

View File

@ -0,0 +1,88 @@
package com.remax.visualnovel.ui.chat.ui
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.widget.LinearLayout
import com.remax.visualnovel.databinding.LayoutMaxNumViewBinding
class MaxNumView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = 0
) : LinearLayout(context, attrs, defStyleAttr) {
companion object {
private var GAP = 100
}
private var mBinding: LayoutMaxNumViewBinding
private var mCurNum = 2500
init {
mBinding = LayoutMaxNumViewBinding.inflate(LayoutInflater.from(context), this, true)
setupClickListeners()
}
private fun setupClickListeners() {
with (mBinding) {
ivLeftIcon.setOnClickListener {
mCurNum -= GAP
tvCenter.text = mCurNum.toString()
}
ivRightIcon.setOnClickListener {
mCurNum += GAP
tvCenter.text = mCurNum.toString()
}
}
}
/*override fun onTouchEvent(event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_DOWN -> {
val x = event.x
val y = event.y
if (mBinding..contains(x, y)) {
isLeftPressed = true
startLongPress(false) // 减小
return true
} else if (rightArrowRect.contains(x, y)) {
isRightPressed = true
startLongPress(true) // 增大
return true
}
}
MotionEvent.ACTION_UP, MotionEvent.ACTION_CANCEL -> {
stopLongPress()
}
MotionEvent.ACTION_MOVE -> {
val x = event.x
val y = event.y
// 如果手指移出按钮区域,停止长按
if (!leftArrowRect.contains(x, y) && isLeftPressed) {
stopLongPress()
}
if (!rightArrowRect.contains(x, y) && isRightPressed) {
stopLongPress()
}
}
}
invalidate()
return super.onTouchEvent(event)
}*/
}

View File

@ -36,6 +36,7 @@ class ExpandSelectView @JvmOverloads constructor(
private fun initView(context: Context, attrs: AttributeSet?) { private fun initView(context: Context, attrs: AttributeSet?) {
mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true) mBinding = LayoutExpandSelectViewBinding.inflate(LayoutInflater.from(context), this, true)
mBinding.itemsContainer.setBackgroundResource(R.drawable.bg_expand_view_items)
setupAttributes(attrs) setupAttributes(attrs)
setupClickListeners() setupClickListeners()
} }

View File

@ -193,8 +193,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginTop="10dp" > android:layout_marginTop="10dp" >
<com.remax.visualnovel.ui.chat.ui.MaxNumView
android:id="@+id/max_response_num_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout> </com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout>
@ -213,6 +216,11 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginTop="10dp" > android:layout_marginTop="10dp" >
<com.remax.visualnovel.ui.chat.ui.FontSetView
android:id="@+id/font_set_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout> </com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout>

View File

@ -47,7 +47,6 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical" android:orientation="vertical"
android:layout_marginTop="@dimen/dp_2" android:layout_marginTop="@dimen/dp_2"
android:background="@drawable/bg_expand_view_items"
android:visibility="gone"/> android:visibility="gone"/>
</LinearLayout> </LinearLayout>

View File

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="utf-8"?>
<com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/titleLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:backgroundColorToken="@string/color_chat_setting_item_bg"
app:radiusToken="@string/radius_m"
android:paddingVertical="@dimen/dp_12"
android:paddingHorizontal="@dimen/dp_17"
>
<com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout
android:id="@+id/left_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/iv_left_icon"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:src="@mipmap/setting_font_icon"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenTextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_10"
android:layout_marginEnd="@dimen/dp_50"
android:textSize="@dimen/sp_14"
android:textColor="@color/gray6"
android:gravity="center"
android:textStyle="bold"
android:text="@string/font_size"
/>
</com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toEndOf="@+id/left_container">
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/iv_font_plus"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:src="@mipmap/setting_font_plus"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenTextView
android:id="@+id/tv_font_value"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/iv_font_plus"
android:layout_toStartOf="@+id/iv_font_add"
android:layout_centerVertical="true"
android:textSize="@dimen/sp_14"
android:textColor="@color/gray6"
android:gravity="center"
android:textStyle="bold"
android:text="20"
/>
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/iv_font_add"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@mipmap/setting_font_add"/>
</RelativeLayout>
</com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout>

View File

@ -1,53 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/titleLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto" app:backgroundColorToken="@string/color_chat_setting_item_bg"
android:orientation="vertical"> app:radiusToken="@string/radius_m"
android:paddingVertical="@dimen/dp_12"
android:paddingHorizontal="@dimen/dp_17"
>
<com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout <com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/titleLayout" android:id="@+id/iv_left_icon"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:src="@mipmap/num_setting_left"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenTextView
android:id="@+id/tv_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
app:backgroundColorToken="@string/color_chat_setting_item_bg" android:layout_toEndOf="@id/iv_left_icon"
app:radiusToken="@string/radius_m" android:layout_toStartOf="@+id/iv_right_icon"
android:padding="@dimen/dp_12" android:layout_centerVertical="true"
> android:textSize="@dimen/sp_14"
android:textColor="@color/gray6"
android:gravity="center"
android:textStyle="bold"
android:text="2500"
/>
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView <com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/icon" android:id="@+id/iv_right_icon"
android:layout_width="24dp" android:layout_width="wrap_content"
android:layout_height="24dp" android:layout_height="match_parent"
android:layout_centerVertical="true" /> android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@mipmap/num_setting_right"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenTextView </com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout>
android:id="@+id/titleText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toEndOf="@id/icon"
android:layout_centerVertical="true"
android:layout_marginStart="12dp"
android:textSize="16sp"
android:textColor="#333333"
android:textStyle="normal"/>
<com.remax.visualnovel.widget.uitoken.view.UITokenImageView
android:id="@+id/arrow"
android:layout_width="16dp"
android:layout_height="16dp"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
android:src="@mipmap/setting_arrow_right"/>
</com.remax.visualnovel.widget.uitoken.view.UITokenRelativeLayout>
<com.remax.visualnovel.widget.uitoken.view.UITokenLinearLayout
android:id="@+id/itemsContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_marginTop="@dimen/dp_2"
android:background="@drawable/bg_expand_view_items"
android:visibility="gone"/>
</LinearLayout>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 628 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -479,5 +479,6 @@
<string name="short_text_mode">Short Text Mode</string> <string name="short_text_mode">Short Text Mode</string>
<string name="play_dialogue_only">Play dialogue only</string> <string name="play_dialogue_only">Play dialogue only</string>
<string name="setting_max_response_num">Maximum number of response tokens</string> <string name="setting_max_response_num">Maximum number of response tokens</string>
<string name="font_size">Font Size</string>
</resources> </resources>