TextInputLayout的使用

  1. 簡介
    在2015谷歌IO大會上,谷歌給我們帶來了Android Design Support Library,該庫向下兼容到Android2.2,對於開發者來說無疑是一件美好的事情。TextInputLayout正是該支持包的新控件,它能使用戶正在輸入文本的時候hint內容自動顯示在輸入框的上方。

    先上一張效果圖(不要看質量)

    這裏寫圖片描述

  2. 實現步驟
    1.導入com.android.support:design包
    這裏寫圖片描述

    也可以在app的build.gradle裏面加上compile ‘com.android.support:design:23.4.0’

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:23.4.0'
    compile 'com.android.support:design:23.4.0'
    testCompile 'junit:junit:4.12'
    compile 'com.jakewharton:butterknife:8.0.1'
    apt 'com.jakewharton:butterknife-compiler:8.0.1'
}

2.佈局文件
佈局文件相當簡單,只需要在TextInputLayout裏面嵌套一個EditText就可以了

    <android.support.design.widget.TextInputLayout
        android:id="@+id/til_password"
        app:hintTextAppearance="@style/TextAppearance.Design.Counter"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <EditText
            android:id="@+id/password"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:hint="@string/prompt_password"
            android:imeActionId="@+id/login"
            android:imeActionLabel="@string/action_sign_in_short"
            android:imeOptions="actionUnspecified"
            android:inputType="textPassword"
            android:maxLines="1"
            android:singleLine="true" />

    </android.support.design.widget.TextInputLayout>

3 . Activity裏面的使用也很簡單,拿到TextInputLayout控件,通過getEditText()可以拿到內部的EditText控件。同樣有setError(CharSequence error)方法設置輸入錯誤提示,setHintTextAppearance(int resId)設置hint顯示風格。

package com.example.textinputlayoutdemo;

import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;

import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;

public class LoginActivity extends AppCompatActivity {
    @BindView(R.id.til_email)
    TextInputLayout tilEmail;
    @BindView(R.id.til_password)
    TextInputLayout tilPassword;
    @BindView(R.id.email_sign_in_button)
    Button emailSignInButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
        ButterKnife.bind(this);
    }

    private void attemptLogin() {
        tilEmail.setError(null);
        tilPassword.setError(null);
        String email = tilEmail.getEditText().getText().toString();
        String password = tilPassword.getEditText().getText().toString();

        // 檢查密碼是否爲有效密碼
        if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) {
            tilPassword.setError(getString(R.string.error_invalid_password));//給用戶提示密碼無效
        }

        if (TextUtils.isEmpty(email)) {
            tilEmail.setError(getString(R.string.error_field_required));
        }
    }

    private boolean isPasswordValid(String password) {
        return password.length() > 4;
    }

    @OnClick({R.id.email_sign_in_button})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.email_sign_in_button:
                attemptLogin();
                break;
        }
    }
}

發佈了35 篇原創文章 · 獲贊 48 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章