Сьогодні, поговоримо про EditText Floating Labels в Android додатках.
Новий TextInputLayout дозволяє нам запаковувати EditText для можливості показувавти плаваючі заголовки над полями EditText. Такж ми маємо можливість показувати помилки під полем EditText. Коил форма EditText в фокусі, підказка піднімається над view в ліву частину.
Перш за все нам необхіжно додати бібліотеку або прописати залежність в файлі gradle.
dependencies {
compile 'com.android.support:design:22.2.0'
}
- dependencies {
- compile 'com.android.support:design:22.2.0'
- }
dependencies {
compile 'com.android.support:design:22.2.0'
}
Після цього оновлюємо файл strings.xml file в проекті.
<resources>
<string name="app_name">EditText Floating Labels Demo</string>
<string name="username">Username</string>
<string name="password">Password</string>
<string name="sign_in">Sign In</string>
<string name="login_error">Username can not be empty</string>
</resources>
- <resources>
- <string name="app_name">EditText Floating Labels Demo</string>
- <string name="username">Username</string>
- <string name="password">Password</string>
- <string name="sign_in">Sign In</string>
- <string name="login_error">Username can not be empty</string>
- </resources>
<resources>
<string name="app_name">EditText Floating Labels Demo</string>
<string name="username">Username</string>
<string name="password">Password</string>
<string name="sign_in">Sign In</string>
<string name="login_error">Username can not be empty</string>
</resources>
Наступний наш крок - додати layout до проекту, над яким ми експерементуємо..
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<android.support.design.widget.TextInputLayout
android:id="@+id/login_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<EditText
android:id="@+id/edit_text_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="@string/username" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/password_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<EditText
android:id="@+id/edit_text_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="@string/password" />
</android.support.design.widget.TextInputLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sign_in"
android:id="@+id/sing_in_button"
android:layout_gravity="center_horizontal" />
</LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:paddingLeft="12dp"
- android:paddingRight="12dp"
- android:paddingTop="8dp"
- android:paddingBottom="8dp">
- <android.support.design.widget.TextInputLayout
- android:id="@+id/login_layout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp">
- <EditText
- android:id="@+id/edit_text_email"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inputType="textEmailAddress"
- android:hint="@string/username" />
- </android.support.design.widget.TextInputLayout>
- <android.support.design.widget.TextInputLayout
- android:id="@+id/password_layout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="8dp">
- <EditText
- android:id="@+id/edit_text_password"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:inputType="textPassword"
- android:hint="@string/password" />
- </android.support.design.widget.TextInputLayout>
- <Button
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/sign_in"
- android:id="@+id/sing_in_button"
- android:layout_gravity="center_horizontal" />
- </LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<android.support.design.widget.TextInputLayout
android:id="@+id/login_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<EditText
android:id="@+id/edit_text_email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textEmailAddress"
android:hint="@string/username" />
</android.support.design.widget.TextInputLayout>
<android.support.design.widget.TextInputLayout
android:id="@+id/password_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<EditText
android:id="@+id/edit_text_password"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textPassword"
android:hint="@string/password" />
</android.support.design.widget.TextInputLayout>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/sign_in"
android:id="@+id/sing_in_button"
android:layout_gravity="center_horizontal" />
</LinearLayout>
Останнім нашим кроком буде оновлення activity.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
}
- public class MainActivity extends AppCompatActivity {
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
- }
- }
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
}
}
Ми також можемо показувати повідомлення про помилку в TextInputLayout. Для цього ми мусимо викоритати метод setErrorEnabled(boolean) та setError(CharSequence). Як приклад ми будемо перевіряти поле login на наявність символів. Тепер нам треба оновити метод onCreate та імплементувати метод onFocusChange.
public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener {
TextInputLayout mUsernameLayout;
EditText mUsername;
EditText mPassword;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
mUsernameLayout = (TextInputLayout) findViewById(R.id.login_layout);
mUsername = (EditText) findViewById(R.id.edit_text_email);
mPassword = (EditText) findViewById(R.id.edit_text_password);
mUsername.setOnFocusChangeListener(this);
mPassword.setOnFocusChangeListener(this);
}
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (v != mUsername && mUsername.getText().toString().isEmpty()) {
mUsernameLayout.setErrorEnabled(true);
mUsernameLayout.setError(getResources().getString(R.string.login_error));
} else {
mUsernameLayout.setErrorEnabled(false);
}
}
}
- public class MainActivity extends AppCompatActivity implements View.OnFocusChangeListener {
- TextInputLayout mUsernameLayout;
- EditText mUsername;
- EditText mPassword;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
- mUsernameLayout = (TextInputLayout) findViewById(R.id.login_layout);
- mUsername = (EditText) findViewById(R.id.edit_text_email);
- mPassword = (EditText) findViewById(R.id.edit_text_password);
- mUsername.setOnFocusChangeListener(this);
- mPassword.setOnFocusChangeListener(this);
- }
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- if (v != mUsername && mUsername.getText().toString().isEmpty()) {
- mUsernameLayout.setErrorEnabled(true);
- mUsernameLayout.setError(getResources().getString(R.string.login_error));
- } else {
- mUsernameLayout.setErrorEnabled(false);
- }
- }
- }
Бачимо результат, мені здається дуже гарно.
Комментариев нет:
Отправить комментарий