亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Android自定義實(shí)現(xiàn)一個(gè)車牌字母選擇鍵盤(pán)

 更新時(shí)間:2023年06月06日 16:49:14   作者:二流小碼農(nóng)  
這篇文章主要為大家詳細(xì)介紹了Android如何自定義實(shí)現(xiàn)一個(gè)車牌字母選擇鍵盤(pán),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

在一般和車相關(guān)的應(yīng)用,難免會(huì)和車牌打交道,組成車牌的要素,國(guó)內(nèi)無(wú)非就是省份簡(jiǎn)稱+地區(qū)代碼+英文或者數(shù)字組成,比如京A12345,在需要輸入車牌的功能上,就需要有省份簡(jiǎn)稱鍵盤(pán)和英文數(shù)字鍵盤(pán)了,在上篇的文章《Android自定義一個(gè)省份簡(jiǎn)稱鍵盤(pán)》,總結(jié)了省份簡(jiǎn)稱鍵盤(pán)的實(shí)現(xiàn),本篇我們繼續(xù)完成英文和數(shù)字鍵盤(pán)的實(shí)現(xiàn)。

今天的內(nèi)容大致如下:

1、最終實(shí)現(xiàn)效果及簡(jiǎn)單分析

2、設(shè)置屬性,制定可擴(kuò)展效果

3、部分源碼剖析

4、開(kāi)源地址及使用總結(jié)

一、最終實(shí)現(xiàn)效果及簡(jiǎn)單分析

以上就是本篇文章最終要實(shí)現(xiàn)的效果,和省份簡(jiǎn)稱鍵盤(pán)不同的是,數(shù)據(jù)源上和邊距有所差別之外,其他的實(shí)現(xiàn)方式均是一樣的,采用外部垂直LinearLayout,內(nèi)部多個(gè)橫向的LinearLayout的搭配方式。

需要注意的是,英文和數(shù)字鍵盤(pán),默認(rèn)狀態(tài)下,頂部的數(shù)字是禁止的,也就是輸入完地區(qū)代碼之后,數(shù)字的禁止?fàn)顟B(tài)才會(huì)釋放;由于距離左右的邊距不同,其在數(shù)據(jù)源的判斷上也會(huì)有不同,這個(gè)也是需要注意的。

二、設(shè)置屬性,制定可擴(kuò)展效果

其相關(guān)屬性和上篇的省份鍵盤(pán)基本上沒(méi)有太大的出入,主要就是動(dòng)態(tài)化設(shè)置,設(shè)置一些,文字的背景,大小,顏色以及格子之間的編輯等,大概羅列了以下屬性:

屬性類型概述
ek_backgroundcolor整體的背景顏色
ek_rect_spacingdimension格子的邊距
ek_rect_heightdimension格子的高度
ek_rect_margin_topdimension格子的距離上邊
ek_margin_left_rightdimension左右距離
ek_margin_topdimension上邊距離
ek_margin_bottomdimension下邊距離
ek_rect_backgroundreference格子的背景
ek_rect_select_backgroundreference格子選擇后的背景
ek_rect_text_sizedimension格子的文字大小
ek_rect_text_colorcolor格子的文字顏色
ek_rect_select_text_colorcolor格子的文字選中顏色
ek_is_show_completeboolean是否顯示完成按鈕
ek_complete_text_sizedimension完成按鈕文字大小
ek_complete_text_colorcolor完成按鈕文字顏色
ek_complete_textstring完成按鈕文字內(nèi)容
ek_complete_margin_topdimension完成按鈕距離上邊
ek_complete_margin_bottomdimension完成按鈕距離下邊
ek_complete_margin_rightdimension完成按鈕距離右邊
ek_other_lines_margindimension其他行邊距
ek_is_num_prohibitboolean數(shù)字是否禁止
ek_text_prohibit_colorcolor數(shù)字禁止顏色
ek_text_click_effectboolean是否觸發(fā)點(diǎn)擊效果,true點(diǎn)擊后背景消失,false不消失

設(shè)置回調(diào)函數(shù)

方法概述
keyboardContent獲取點(diǎn)擊的省份簡(jiǎn)稱簡(jiǎn)稱信息
keyboardDelete刪除省份簡(jiǎn)稱簡(jiǎn)稱信息
keyboardComplete鍵盤(pán)點(diǎn)擊完成
openProhibit打開(kāi)禁止(使領(lǐng)學(xué)港澳),使其可以點(diǎn)擊

三、部分源碼剖析

這里只貼出部分的關(guān)鍵性代碼,整體的代碼,大家滑到底部查看源碼地址即可。

定義字母和數(shù)字?jǐn)?shù)組

   private val mEnglishList = arrayListOf(
        "1", "2", "3", "4", "5", "6", "7", "8", "9", "0",
        "Q", "W", "E", "R", "T", "Y", "U", "O", "P",
        "A", "S", "D", "F", "G", "H", "J", "K", "L",
        "Z", "X", "C", "V", "B", "N", "M"
    )

定義遍歷數(shù)字和字母

由于在數(shù)據(jù)源上使用的是同一個(gè),那么需要做截取分別進(jìn)行遍歷,便于控制左右的邊距和本身的格子大小。

 //遍歷數(shù)字
        eachData(mEnglishList.subList(0, 10), mLength, true)
        //遍歷字母
        eachData(mEnglishList.subList(10, mEnglishList.size), mLength - 1, false)
        //追加最后一個(gè)刪除按鈕View,動(dòng)態(tài)計(jì)算寬度
        addEndView(mLineLayout)

遍歷數(shù)據(jù)

遍歷數(shù)據(jù)的邏輯和上篇保持一致,當(dāng)和定義的長(zhǎng)度取模為0時(shí),就需要換行,換行就是重新創(chuàng)建一個(gè)水平的LinearLayout,添加至垂直的LinearLayout之中,需要做判斷的是,左右的邊距。

/**
     * AUTHOR:AbnerMing
     * INTRODUCE:遍歷數(shù)據(jù)
     */
    private fun eachData(
        list: List<String>,
        len: Int,
        isNumber: Boolean = false
    ) {
        list.forEachIndexed { index, s ->
            if (index % len == 0) {
                //重新創(chuàng)建,并添加View
                mLineLayout = createLinearLayout()
                mLineLayout?.weightSum = len.toFloat()
                addView(mLineLayout)
                val params = mLineLayout?.layoutParams as LayoutParams
                params.apply {
                    topMargin = mRectMarginTop.toInt()
                    height = mRectHeight.toInt()
                    if (isNumber) {
                        //是數(shù)字
                        leftMargin = mMarginLeftRight.toInt()
                        rightMargin = mMarginLeftRight.toInt() - mSpacing.toInt()
                    } else {
                        //是字母
                        leftMargin = mOtherLinesMargin.toInt()
                        rightMargin = mOtherLinesMargin.toInt() - mSpacing.toInt()
                    }
                    mLineLayout?.layoutParams = this
                }
            }
            //創(chuàng)建文字視圖
            val textView = TextView(context).apply {
                text = s
                //設(shè)置文字的屬性
                textSize = px2sp(mRectTextSize)
                //禁止
                if (isNumber) {
                    //是數(shù)字
                    if (mNumProhibit) {
                        setTextColor(mRectTextColor)
                    } else {
                        setTextColor(mNumProhibitColor)
                    }
                } else {
                    setTextColor(mRectTextColor)
                }
                setBackgroundResource(mRectBackGround)
                gravity = Gravity.CENTER
                setOnClickListener {
                    //每個(gè)格子的點(diǎn)擊事件
                    if (isNumber && !mNumProhibit) {
                        //如果是數(shù)字,根據(jù)規(guī)則暫時(shí)不觸發(fā)點(diǎn)擊
                        return@setOnClickListener
                    }
                    changeTextViewState(this)
                }
            }
            //是數(shù)字
            if (isNumber) {
                mTempTextViewList.add(textView)
            }
            addRectView(textView, mLineLayout, 1f)
        }
    }

添加視圖

設(shè)置每個(gè)格子的寬高和權(quán)重。

 /**
     * AUTHOR:AbnerMing
     * INTRODUCE:追加視圖
     */
    private fun addRectView(view: View, layout: LinearLayout?, w: Float) {
        layout?.addView(view)
        val textParams = view.layoutParams as LayoutParams
        textParams.apply {
            weight = w
            width = 0
            height = LayoutParams.MATCH_PARENT
            //每行的最后一個(gè)
            rightMargin = mSpacing.toInt()
            view.layoutParams = this
        }
    }

至于最后一個(gè)刪除按鈕,也需要?jiǎng)討B(tài)的計(jì)算其本身的寬高,基本上和上篇一致,就不過(guò)多贅述了。

四、開(kāi)源地址及使用總結(jié)

開(kāi)源地址:github.com/AbnerMing888/EnglishKeyboardView

關(guān)于如何使用,有兩種方式,一種是下載源碼,直接把源碼復(fù)制出來(lái),二是可以使用以下的遠(yuǎn)程Maven依賴方式。

Maven具體調(diào)用

1、在你的根項(xiàng)目下的build.gradle文件下,引入maven。

allprojects {
    repositories {
        maven { url "https://gitee.com/AbnerAndroid/almighty/raw/master" }
    }
}

2、在你需要使用的Module中build.gradle文件下,引入依賴。

dependencies {
    implementation 'com.vip:board:1.0.0'
}

代碼使用

<com.vip.board.EnglishKeyboardView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

總結(jié)

屬性配置了有很多,可以實(shí)現(xiàn)多種自定義的相關(guān)效果,大家可以查找第二項(xiàng)中的屬性介紹,進(jìn)行自定義配置,還是那句話,本身的實(shí)現(xiàn)方式有很多種,本篇只是其中的一個(gè)簡(jiǎn)單的案例,僅供大家作為一個(gè)參考。

自定義英文和數(shù)字鍵盤(pán),大家有沒(méi)有發(fā)現(xiàn)了少了一個(gè)字母,為什么會(huì)沒(méi)有這個(gè)字母呢?你知道原因嗎?

以上就是Android自定義實(shí)現(xiàn)一個(gè)車牌字母選擇鍵盤(pán)的詳細(xì)內(nèi)容,更多關(guān)于Android鍵盤(pán)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論