TextInputLayout 的简单使用

TextInputLayout  作为一个父容器,包装了 EditText。通常单独使用 EditText 时,使用 hint 定义的提示信息会随着用户输入的第一个数据开始,就自动隐藏了;而使用用 TextInputLayout   包裹的 EditText 时,就不会出现这种现象。同时也可以给 EditText 增加监听事件。其中的一些参数如代码中注释。

效果如下:



其中的提示信息的颜色是 styles.xml 中的 colorAccent。


当然首先得添加支持库(design:23.1.1 可修改):





content_main.xml :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:orientation="horizontal"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.crazy.androiddesigntest.MainActivity"
    tools:showIn="@layout/activity_main">

    <android.support.design.widget.TextInputLayout
        android:id="@+id/textInputLayout"
        android:layout_weight="9"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:hint="输入的数从0开始计数"
            android:ellipsize="start"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />
    </android.support.design.widget.TextInputLayout>

    <Button
        android:id="@+id/button"
        android:layout_weight="1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="确定"/>
</LinearLayout>



MainActivity.java :

package com.crazy.androiddesigntest;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.TextInputLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends AppCompatActivity {

    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        final TextInputLayout textInputLayout = (TextInputLayout)findViewById(R.id.textInputLayout);
        EditText editText = textInputLayout.getEditText();

        button = (Button)findViewById(R.id.button);

        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                if (s.length() > 5) {
                    // 提示出错(如果不修改错误,则提示不会消失)
                    // 注意:s.length()是长度值,如果正确输入时 start==5 也不会报错;
                    // 但是当 start==5 时删除一个数据就会出现提示的错误信息
                    textInputLayout.setError("超出范围了!!");
                    // 显示出错提示
                    textInputLayout.setErrorEnabled(true);
                } else {
                    textInputLayout.setErrorEnabled(false);
                }
            }

            /**
             *
             * @param s 字符序列
             * @param start 开始的位置,从 0 开始
             * @param before 删除时 before 从 0 变为 1
             * @param count 输入正确时该值为 1,删除时,该值为 0
             */
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                if (start == 0 && count == 1 && s.length() <= 5) {
                    Toast.makeText(MainActivity.this, "您已经开始输入信息了!", Toast.LENGTH_SHORT).show();
                }
                if (before == 1 && start != 0 && s.length() <= 5) {
                    Toast.makeText(MainActivity.this, "您正在更正信息!", Toast.LENGTH_SHORT).show();
                }
                if (start == 0 && count == 0 && s.length() <= 5) {
                    Toast.makeText(MainActivity.this, "您要从头开始重新输入!", Toast.LENGTH_SHORT).show();
                    return;
                }
                if (count == 1 && start != 0 && s.length() <= 5) {
                    Toast.makeText(MainActivity.this, "您正在输入!", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void afterTextChanged(Editable s) {
                buttonClick(s);
            }
        });

    }

    private void buttonClick(final Editable s){
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
                alertDialog.setTitle("确认信息");
                alertDialog.setIcon(R.drawable.tools);
                alertDialog.setMessage("您输入的信息为:" + s.toString());

                // 为 AlertDialog.Builder 添加确定按钮
                setPositiveButton(alertDialog);
                // 为 AlertDialog.Builder 添加取消按钮
                setNegativeButton(alertDialog, s);
                alertDialog.create().show();
            }
        });
    }

    private AlertDialog.Builder setPositiveButton(AlertDialog.Builder alertDialog) {
        // 调用 setPositiveButton 方法添加“确定”按钮
        return alertDialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Intent intent  = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }

    private AlertDialog.Builder setNegativeButton(AlertDialog.Builder alertDialog,
                                                  final Editable s){
        // 调用 setPositiveButton 方法添加“取消”按钮
        return alertDialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                s.clear();
                Toast.makeText(MainActivity.this, "您已经取消", Toast.LENGTH_LONG).show();
            }
        });
    }
}



SecondActivity.java :

package com.crazy.androiddesigntest;

import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.widget.TextView;

/**
 * Created by antimage on 2015/12/20.
 */
public class SecondActivity extends Activity{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView textView = new TextView(this);
        textView.setGravity(Gravity.CENTER);
        textView.setText("欢迎来到我的世界!");
        textView.setTextSize(30);
        textView.setTextColor(Color.RED);

        setContentView(textView);
    }
}



不要忘了在 AndroidManifest.xml 中为 SecondeActivity 注册:

<activity android:name=".SecondActivity" />


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值