欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android自定義實現(xiàn)一個車牌字母選擇鍵盤

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

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

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

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

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

3、部分源碼剖析

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

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

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

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

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

其相關(guān)屬性和上篇的省份鍵盤基本上沒有太大的出入,主要就是動態(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ā)點擊效果,true點擊后背景消失,false不消失

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

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

三、部分源碼剖析

這里只貼出部分的關(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ù)源上使用的是同一個,那么需要做截取分別進行遍歷,便于控制左右的邊距和本身的格子大小。

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

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

遍歷數(shù)據(jù)的邏輯和上篇保持一致,當(dāng)和定義的長度取模為0時,就需要換行,換行就是重新創(chuàng)建一個水平的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 {
                    //每個格子的點擊事件
                    if (isNumber && !mNumProhibit) {
                        //如果是數(shù)字,根據(jù)規(guī)則暫時不觸發(fā)點擊
                        return@setOnClickListener
                    }
                    changeTextViewState(this)
                }
            }
            //是數(shù)字
            if (isNumber) {
                mTempTextViewList.add(textView)
            }
            addRectView(textView, mLineLayout, 1f)
        }
    }

添加視圖

設(shè)置每個格子的寬高和權(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
            //每行的最后一個
            rightMargin = mSpacing.toInt()
            view.layoutParams = this
        }
    }

至于最后一個刪除按鈕,也需要動態(tài)的計算其本身的寬高,基本上和上篇一致,就不過多贅述了。

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

開源地址:github.com/AbnerMing888/EnglishKeyboardView

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

Maven具體調(diào)用

1、在你的根項目下的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é)

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

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

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

相關(guān)文章

  • Android中l(wèi)istview嵌套scrollveiw沖突的解決方法

    Android中l(wèi)istview嵌套scrollveiw沖突的解決方法

    這篇文章主要為大家詳細(xì)介紹了Android中l(wèi)istview嵌套scrollveiw沖突的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 探討:如何在ScrollView中嵌套ListView

    探討:如何在ScrollView中嵌套ListView

    本篇文章是對如何在ScrollView中嵌套ListView的解決方法進行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • Adnroid 自定義ProgressDialog加載中(加載圈)

    Adnroid 自定義ProgressDialog加載中(加載圈)

    這篇文章主要介紹了Adnroid 自定義ProgressDialog加載中(加載圈),需要的朋友可以參考下
    2017-06-06
  • Android基于Fresco實現(xiàn)圓角和圓形圖片

    Android基于Fresco實現(xiàn)圓角和圓形圖片

    這篇文章主要為大家詳細(xì)介紹了Android基于Fresco實現(xiàn)圓角和圓形圖片,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Android自定義view實現(xiàn)帶header和footer的Layout

    Android自定義view實現(xiàn)帶header和footer的Layout

    這篇文章主要介紹了Android自定義view實現(xiàn)帶header和footer的Layout,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • Android創(chuàng)建服務(wù)之started service詳細(xì)介紹

    Android創(chuàng)建服務(wù)之started service詳細(xì)介紹

    這篇文章主要介紹了Android創(chuàng)建服務(wù)之started service,需要的朋友可以參考下
    2014-02-02
  • Android自定義ImageView實現(xiàn)圓角功能

    Android自定義ImageView實現(xiàn)圓角功能

    這篇文章主要為大家詳細(xì)介紹了Android自定義ImageView實現(xiàn)圓角功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Android個人手機通訊錄開發(fā)詳解

    Android個人手機通訊錄開發(fā)詳解

    在本篇文章里小編給大家分享了關(guān)于Android個人手機通訊錄開發(fā)的步驟和相關(guān)源碼,有需要的朋友們學(xué)習(xí)下。
    2019-02-02
  • Android?JetPack組件的支持庫Databinding詳解

    Android?JetPack組件的支持庫Databinding詳解

    DataBinding是Google發(fā)布的一個數(shù)據(jù)綁定框架,它能夠讓開發(fā)者減少重復(fù)性非常高的代碼,如findViewById這樣的操作。其核心優(yōu)勢是解決了數(shù)據(jù)分解映射到各個view的問題,在MVVM框架中,實現(xiàn)的View和Viewmode的雙向數(shù)據(jù)綁定
    2022-08-08
  • Android開發(fā)自學(xué)路線圖

    Android開發(fā)自學(xué)路線圖

    這篇文章主要介紹了Android開發(fā)自學(xué)路線圖,本文講解的路線圖分為JAVA、Android基礎(chǔ)、Web基礎(chǔ)、Android項目4部份,是一個入門級學(xué)習(xí)路線圖,需要的朋友可以參考下
    2015-04-04

最新評論