Android 使用Kotlin来实现加边框的文本

Posted Adan0520

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 使用Kotlin来实现加边框的文本相关的知识,希望对你有一定的参考价值。

本篇文章讲的是使用Kotlin来实现加边框的文本。
按照惯例,我们先来看看效果图

下面就是我们的代码实现
1、BorderTextView中重写onDraw方法

package co.per.bordertextview

import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.util.AttributeSet
import androidx.annotation.AttrRes
import androidx.appcompat.widget.AppCompatTextView

/**
 * 实现加边框的文本
 * Created by juan on 2021/07/28.
 */
class BorderTextView : AppCompatTextView 

    constructor(context: Context) : this(context, null)

    constructor(context: Context, attr: AttributeSet?) : this(context, attr, 0)

    constructor(context: Context, attr: AttributeSet?, @AttrRes defStyleAttr: Int) : super(context, attr, defStyleAttr)

    override fun onDraw(canvas: Canvas) 
        val paint = Paint()
        paint.strokeWidth = 6f
        //  设置边框的颜色
        paint.color = Color.parseColor("#60646A")
        //  画TextView的4个边
        canvas.drawLine(0f, 0f, (width).toFloat(), 0f, paint)
        canvas.drawLine(0f, 0f, 0f, (height).toFloat(), paint)
        canvas.drawLine((width).toFloat(), 0f, (width).toFloat(), (height).toFloat(), paint)
        canvas.drawLine(0f, (height).toFloat(), (width).toFloat(), (height).toFloat(), paint)
        super.onDraw(canvas)
    

2、MainActivity

package co.per.bordertextview

import android.content.res.Resources
import android.graphics.Color
import android.graphics.Typeface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup
import android.widget.LinearLayout
import android.widget.TextView

class MainActivity : AppCompatActivity() 
    private lateinit var llBookNum: LinearLayout
    private lateinit var llBookUserNum: LinearLayout
    private lateinit var llBookKm: LinearLayout

    override fun onCreate(savedInstanceState: Bundle?) 
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        llBookNum = findViewById(R.id.ll_book_num)
        llBookUserNum = findViewById(R.id.ll_book_user_num)
        llBookKm = findViewById(R.id.ll_book_km)

        // 这是我的第X本书
        show(llBookNum, "199")
        // 阅读了X次
        show(llBookUserNum, "33")
        // 陪伴了我X年
        show(llBookKm, "5")
    

    private fun show(linearLayout: LinearLayout, numTxt: String) 
        for (element in numTxt) 
            val txt = element.toString()
            val params = LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)
            var textView: TextView
            if ("." == txt) 
                textView = TextView(this)
             else 
                textView = BorderTextView(this)
                textView.setPadding(10, 2, 10, 2)
                params.leftMargin = dpToPx(2f)
                params.rightMargin = dpToPx(2f)
            
            textView.gravity = Gravity.CENTER
            textView.setTextColor(Color.parseColor("#60646A"))
            textView.textSize = 16f
            textView.text = txt
            textView.typeface = Typeface.DEFAULT_BOLD
            linearLayout.addView(textView, params)
        
    

    companion object 
        /**
         * dp转换为px
         */
        fun dpToPx(dp: Float): Int 
            return (dp * Resources.getSystem().displayMetrics.density + 0.5f).toInt()
        
    

3、布局文件

<?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="match_parent"
    android:paddingTop="48dp"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="22dp"
        android:gravity="center|bottom"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_book_tip"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="这是我的第"
            android:textColor="#18191D"
            android:textSize="14dp" />

        <LinearLayout
            android:id="@+id/ll_book_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" />

        <TextView
            android:id="@+id/tv_book_unit"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="本书"
            android:textColor="#18191D"
            android:textSize="14dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_book_used_num"
        android:layout_width="match_parent"
        android:layout_height="22dp"
        android:layout_marginTop="7dp"
        android:gravity="center|bottom"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="阅读了"
            android:textColor="#18191D"
            android:textSize="14dp" />

        <LinearLayout
            android:id="@+id/ll_book_user_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="次"
            android:textColor="#18191D"
            android:textSize="14dp" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/ll_book_used_km"
        android:layout_width="match_parent"
        android:layout_height="22dp"
        android:layout_marginTop="7dp"
        android:gravity="center|bottom"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="陪伴了我"
            android:textColor="#18191D"
            android:textSize="14dp" />

        <LinearLayout
            android:id="@+id/ll_book_km"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="horizontal" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="年"
            android:textColor="#18191D"
            android:textSize="14dp" />
    </LinearLayout>

</LinearLayout>

源码下载

以上是关于Android 使用Kotlin来实现加边框的文本的主要内容,如果未能解决你的问题,请参考以下文章

Android 使用Kotlin来实现加边框的文本

Android 使用Kotlin来实现加边框的文本

Android 使用Kotlin来实现加边框的文本

怎么给android 设置边框

Android学习笔记技巧之给文本加边框

Android CheckBox 改变边框和填充色