天天看點

【MaterialEditText】 Material Design 的 EditText

轉發位址:http://www.rengwuxian.com/post/materialedittext

【MaterialEditText】 Material Design 的 EditText

注意: 2.0 不相容 1.0 的API!以下是改動内容:

  • 為了避免和其他庫沖突,2.0為所有屬性加了字首 

    met_

    .
  • 使用新的規則來設定 baseColor 的預設值。舊規則:提取 window 的背景色來選取與之相對的顔色作為預設 baseColor (純黑或純白)。新的規則:固定為黑色。

随着 Material Design 的到來, AppCompat v21 中也提供了 Material Design 的控件外觀支援,其中包括 EditText 。但 AppCompat 中的 EditText 實在有點難用,因為它是通過 colorAccent 來自動為控件着色的,并沒有提供設定顔色的api,是以需要通過為控件定制theme的方式來實作自定義控件顔色。 另外,除了外觀上的變化, AppCompat 沒有提供任何 Google Material Design Spec 中提到的特性。于是我便做了這個庫: MaterialEditText 。

特性和使用方式:

  • 基本使用

在布局檔案中把 EditText 替換為 com.rengwuxian.materialedittext.MaterialEditText 就行了。MaterialEditText 是直接繼承的 EditText ,沒有加入一些 Wrapper Layout , 是以多數情況下你不需要修改 java 檔案。

<com.rengwuxian.materialedittext.MaterialEditText
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:hint="Basic"/>
      
【MaterialEditText】 Material Design 的 EditText
  • 自定義顔色

BaseColor被用作背景線的顔色、主字型的顔色(透明度被重置為87%)和提示字型的顔色(透明度被重置為26%)。你可以使用

app:met_baseColor

(xml) 或者 

setBaseColor()

(java) 來指定 Base Color 。Base Color 的預設值為純黑。

【MaterialEditText】 Material Design 的 EditText

Primary Color 被用作激活狀态的輸入框背景色、高亮的Floating Label色和底部省略号的顔色。你可以使用 

app:met_primaryColor

 (xml) 或者 

setPrimaryColor()

(java) 來指定 Primary Color。如果沒有設定Primary Color,預設将使用 Base Color 來替代。

app:met_baseColor="#0056d3"
app:met_primaryColor="#982360"
      
【MaterialEditText】 Material Design 的 EditText
  • Floating Label

FloatingLabel有三種模式:

none

,

normal

 , 

highlight

 。 你可以使用 

app:met_floatingLabel

 (xml) 或者

setFloatingLabel()

 (java) 來設定 Floating Label 的模式。

normal:

【MaterialEditText】 Material Design 的 EditText

highlight:

【MaterialEditText】 Material Design 的 EditText

自定義 floating label 的文字:

![CustomFloatingLabelText]./images/MaterialEditText/custom_floating_label_text.png)

  • 底部省略号

當設定顯示底部省略号後,控件會在文字向左滾動時在底部左側顯示一個三個點的省略号,點選省略号将自動把光标置于字元串的開始處。你可以通過

app:met_singleLineEllipsis=true

(xml)或者

setSingleLineEllipsis()

(java)來設定它。這個屬性将自動設定

android:singleLine

 為 true。

注意:底部省略号會自動增大控件底部的高度。

【MaterialEditText】 Material Design 的 EditText
  • 字元數限制

設定字元數限制後,控件右下角會顯示已輸入字元數和最大字元數的角标,并在超過限制後顯示警告色(預設為紅色)。 你可以通過

app:maxCharacters

 (xml) 或者 

setMaxCharacters()

 (java) 來設定字元數,通過 

app:errorColor

 或者 

setErrorColor()

 (java) 來自定義警告色。

使用 

app:met_maxCharacters

 (xml) 或者 

setMaxCharacters()

 (java) 來設定最多字數,使用 

app:met_minCharacters

 (xml) 或者

setMinCharacters()

 (java) 來設定最少字數. 當字數不符合限制要求的時候,底部的線和顯示字數的角标都會變紅(你也可以使用

app:met_errorColor

 或者 

setErrorColor()

 來自定義 error color)。

注意:字元數角标會自動增大控件底部的高度。

app:met_minCharacters="5"
  app:met_maxCharacters="10"
      

預設 error color:

【MaterialEditText】 Material Design 的 EditText

自定義 error color:

app:met_maxCharacters="10"
  app:met_errorColor="#ddaa00"
      
【MaterialEditText】 Material Design 的 EditText
  • Helper Text 和 Error Text
    【MaterialEditText】 Material Design 的 EditText

    helper text:

    error text:

    在 java代碼中調用原生的 

    setError(CharSequence error)

     就可以實作.

    正規表達式檢查:

    帶有報錯字元串的正規表達式檢查:

  • 自定義 accent typeface

    floating label, error/helper text, character counter 的typeface.

    【MaterialEditText】 Material Design 的 EditText
  • Hide Underline
    【MaterialEditText】 Material Design 的 EditText
  • 字元串檢查

    檢查後,如果有錯,将自動調用 

    setError()

     方法來提示錯誤。

    單一條件檢查:

    複合條件檢查:

    et.addValidator(new CustomValidator1())
    .addValidator(new CustomValidator2())
    .addValidator(new RegexpValidator("Only Integer Valid!", "\\d+"));
          

全部參數

通用顔色

met_baseColor

: 底部橫線和所有文字在無焦點狀态的基礎色。預設為黑色。

met_primaryColor

: 底部橫線和 Floating label 的高亮色(如果 met_floatingLabel 設定為 highlight 的話)。預設使用 baseColor。

met_textColor

: 和自帶的 

android:textColor

 作用相同。換用這個就好。

met_textColorHint

: 和自帶的 

android:textColorHint

 作用相同。換用這個就好。

met_underlineColor

: 自定義底部橫線的顔色。

Floating label

met_floatingLabel

: Floating label 應該怎樣被展示。選項有:none, normal, highlight。 預設是 none.

met_floatingLabelText

: 自定義 floating label 的文字。

met_floatingLabelTextSize

: Floating label 的字型大小。預設為 12sp。

met_floatingLabelTextColor

: Floating label 的字型顔色。預設為半透明的 baseColor.

met_floatingLabelPadding

: Floating label 和主文字區域的間隔。

met_floatingLabelAnimating

: 是否使用動畫來顯示和消失 floating label 。預設為 true 。

met_floatingLabelAlwaysShown

: 是否總是顯示 Floating label 。預設為 false 。

字數限制

met_minCharacters

: 限制的最少字數。預設為0。

met_maxCharacters

: 限制的最大字數。0為無限制。預設為0.

Helper/Error text

met_helperText

: 底部的 helper text。

met_helperTextAlwaysShown

: 是否總是顯示 helper text, 而不僅僅是在獲得焦點狀态時。預設為 false。

met_helperTextColor

: Helper text 的字型顔色。

met_errorColor

: Error text 的字型顔色。

met_bottomTextSize

: 底部文字(Helper/Error text)的字型大小。預設為12sp。

met_minBottomTextLines

:底部為文字預留的行數,不管是否有 Helper/Error text 正在顯示。

字型(Typeface)

met_typeface

: 主文字的字型.

met_accentTypeface

: 輔助文字的字型.

Material Design 風格的左右圖示

met_iconLeft

: 左邊的圖示.

met_iconRight

: 右邊的圖示.

met_iconPadding

: 圖示和主區域之間的padding。預設為16dp, 遵守 Google's Material Design Spec 中的建議.

Others

met_hideUnderline

: 是否隐藏底部橫線。預設為 false。

met_autoValidate

: 是否自動檢查字元串。預設為 false。

met_singleLineEllipsis

: 是否在文字超長時顯示底部的省略号。預設為 false。

met_clearButton

: 是否顯示用來清空文字的 Clear button 。預設為 false。

github位址: MaterialEditText

library下載下傳:MaterialEditText-2.0.3.aar

sample下載下傳:MaterialEditText-2.0.3-sample.apk