简介
在2015谷歌IO大会上,谷歌给我们带来了Android Design Support Library,该库向下兼容到Android2.2,对于开发者来说无疑是一件美好的事情。TextInputLayout正是该支持包的新控件,它能使用户正在输入文本的时候hint内容自动显示在输入框的上方。先上一张效果图(不要看质量)
实现步骤
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;
}
}
}