EditText изменить положение текста setError

Итак, то, что я пытаюсь реализовать, состоит из двух частей.

Один из них дает моему тексту редактирования парольToggle, для которого я использую android.support.design.widget TextInputLayout+TextInputEditText

Так вот как выглядит мой edittext

редактировать текст с паролемToggle

Часть вторая: я хочу добавить проверку и установить соответствующее сообщение об ошибке. Мне нужно, чтобы сообщение об ошибке отображалось следующим образом

edittext с пользовательским setError

Мой код макета выглядит следующим образом

<android.support.design.widget.TextInputLayout
    style="@style/editTextBold"
    android:id="@+id/input_pwd_parent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:hintAnimationEnabled="false"
    app:hintEnabled="false"
    app:passwordToggleEnabled="true">

    <android.support.design.widget.TextInputEditText
        android:id="@+id/input_pwd"
        style="@style/editTextBold"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:ems="10"
        android:hint="@string/hint_pwd"
        android:inputType="textPassword"
        android:padding="10dp" />
</android.support.design.widget.TextInputLayout> 

Итак, я хочу знать

1.Как с помощью кода скрыть/отобразить значок переключения пароля в тексте редактирования?

2.Также как сделать так, чтобы вместо значка passwordToggle отображалось сообщение setError (после того, как я скрою его с помощью кода)




Ответы (1)


Завершено создание пользовательского представления

введите здесь описание изображения

Компонент можно найти здесь

https://github.com/vnh1991/CustomValidatorEditText

Импортируйте проект lib как модуль,

в вашем макете создайте контейнер

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.v2dev.customedittextdemo.MainActivity">

    <LinearLayout
        android:id="@+id/llContainer"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="10dp"
        android:orientation="vertical"></LinearLayout>

    <Button
        android:id="@+id/btnValidate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_below="@+id/llContainer"
        android:padding="10dp"
        android:text="Validate" />

</RelativeLayout>

И в вашей деятельности загрузите компонент в контейнер

package com.v2dev.customedittextdemo;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;

import com.v_sQr_dev.customvalidatoredittext.CustomEdittext;

public class MainActivity extends AppCompatActivity {

    private LinearLayout llContainer;
    private Button btnValidate;
    private CustomEdittext inputPwd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        llContainer = (LinearLayout) findViewById(R.id.llContainer);
        btnValidate = (Button) findViewById(R.id.btnValidate);
        inputPwd = new CustomEdittext(llContainer, this);
        inputPwd.setHint("PASSWORD");

        btnValidate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(inputPwd.validate()){
                    Toast.makeText(MainActivity.this,"Input Valid",Toast.LENGTH_SHORT).show();
                }
            }
        });
    }
}
person ViVekH    schedule 24.08.2017
comment
Есть ли причина, по которой мы не можем просто использовать тег <com.v_sQr_dev.customvalidatoredittext.CustomEdittext> непосредственно в наших макетах XML? - person Code-Apprentice; 24.08.2017
comment
Поправьте меня, если я ошибаюсь, но поскольку мой собственный класс представления не расширяет TextInputEditText , я не смогу использовать его непосредственно в макете. Код = github. com/vnh1991/CustomValidatorEditText/blob/master/ - person ViVekH; 24.08.2017
comment
Чтобы использовать свое собственное представление в XML, вы должны расширить View или любой из его потомков. Это не должно требовать слишком много усилий для вашего пользовательского представления. Расширение TextInputEditText требуется только в том случае, если вы хотите использовать свой собственный вид внутри TextInputLayout. - person Code-Apprentice; 24.08.2017
comment
Обратите внимание, что расширение View позволит вам создавать настраиваемые атрибуты, которые можно установить в XML. Тогда вам не понадобится контекст в вашем пользовательском классе представления для загрузки каких-либо ресурсов. Android позаботится о деталях за вас, если вы сделаете это правильно. - person Code-Apprentice; 24.08.2017