1

所以我试图实现的有两个部分

一个即时通讯给我的编辑文本密码切换,我正在使用 android.support.design.widget TextInputLayout+TextInputEditText

所以这就是我的edittext的样子

带密码的编辑文本切换

第二部分是我想添加验证并设置适当的错误消息。我需要将错误消息显示如下

带有自定义 setError 的edittext

我的布局代码如下

<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.如何通过代码隐藏/取消隐藏edittext中的密码切换图标?

2.另外我如何使 setError 消息出现在密码切换图标的位置(一旦我通过代码隐藏它)

4

1 回答 1

0

最终创建了一个自定义视图

在此处输入图像描述

该组件可以在这里找到

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();
                }
            }
        });
    }
}
于 2017-08-24T08:44:34.513 回答