在一些体验较好的APP中,输入框输入时会有相应的提示,让人能够很快的通过点击提示进入下一步

 

这里,我就通过自己构思,实现了一个通过 SharedPreferences 保存的输入提示 demo

 

 

实现:

1、实现一个 SharedPreferences 以及其 get、set方法

2、布局一个  AutoCompleteTextView

3、通过java代码实现适配布局、输入提示的保存

4、实际运用

 

效果:

 

AutoCompleteTextView 定义的输入框和普通的 EditText 差不多

Android弹出输入框改变样式 android输入框提示_AutoCompleteTextView

但是可以通过其他设置让它有输入提示功能

Android弹出输入框改变样式 android输入框提示_记忆输入_02

 

实现详情:

 

1、实现一个 SharedPreferences 以及其 get、set方法

SharedPreferences 是一个轻量级的储存类,这里我拿它来做实验,我设置最多可以保存三个提示

 

import android.content.Context;
import android.content.SharedPreferences;

/**
 * Created by Administrator on 2018/3/23 0023.
 * 定义 SharedPreferences 以及相应的 get、set 方法
 */

public class MySharedPreferences {
    //创建一个SharedPreferences    类似于创建一个数据库,库名为 data
    public static SharedPreferences share(Context context){
        SharedPreferences sharedPreferences = context.getSharedPreferences("date", 
                Context.MODE_PRIVATE);
        return sharedPreferences;
    }

    //账号1
    public static String getPhone1(Context context){
        return share(context).getString("phone1",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone1(String phone1, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone1",phone1);
        e.apply();
    }

    //账号2
    public static String getPhone2(Context context){
        return share(context).getString("phone2",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone2(String phone2, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone2",phone2);
        e.apply();
    }

    //账号3
    public static String getPhone3(Context context){
        return share(context).getString("phone3",null);
    }
    //这里使用的是 apply() 方法保存,将不会有返回值
    public static void setPhone3(String phone3, Context context){
        SharedPreferences.Editor e = share(context).edit();
        e.putString("phone3",phone3);
        e.apply();
    }
}

SharedPreferences 可以灵活运用,还可以保存一些其他的常用配置信息、状态信息等

 

 

 

2、布局一个  AutoCompleteTextView

 

<AutoCompleteTextView
    android:id="@+id/phone"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="账号(一般是手机号)"/>

<EditText
    android:id="@+id/pswd"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:hint="密码"/>

<Button
    android:id="@+id/sign_in"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="登录"/>

布局很简单,看上面的效果图就知道了,只不过第一个输入框是 AutoCompleteTextView

第二个是普通的 EditView 加了密码效果

 

3、通过java代码实现适配布局、输入提示的保存

这里是重点,主要是为 AutoCompleteTextView 加入提示数据还有更新登入提示数据

 

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    private AutoCompleteTextView phone;
    private EditText pswd;
    private Button sign_in;
    private String[] array;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        phone = (AutoCompleteTextView) findViewById(R.id.phone);

        array = new String[3];
        array[0] = MySharedPreferences.getPhone1(this)+"";
        array[1] = MySharedPreferences.getPhone2(this)+"";
        array[2] = MySharedPreferences.getPhone3(this)+"";

        //创建 AutoCompleteTextView 适配器 (输入提示)
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(
                this,
                android.R.layout.simple_dropdown_item_1line,
                array);
        //初始化autoCompleteTextView
        phone.setAdapter(adapter);
        //设置输入多少字符后提示,默认值为2,在此设为1
        phone.setThreshold(1);

        pswd = (EditText) findViewById(R.id.pswd);
        sign_in = (Button) findViewById(R.id.sign_in);


        sign_in.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //登录判断。。。

                //这里假设登入成功了 if 里面的是判断是否登入成功(这里随便写的)
                if((phone.getText().length()+pswd.getText().length()) >= 10){
                    //判断登录的账号有没有保存
                    phones(MainActivity.this, array, phone.getText().toString());
                }
                startActivity(new Intent(MainActivity.this, Main2Activity.class));
            }
        });

    }
    //判断登录的账号有没有保存,没有就保存起来,替换一个最久没登录的
    public static void phones(Context context, String[]array, String phone){
        //当 phone 是新登录的账号的时候
        boolean trfa = (!phone.equals(array[0]) && !phone.equals(array[1]) && !phone.equals(array[2]));
        if(trfa){
            //循环一下,将最后一个替换成新的
            MySharedPreferences.setPhone3(array[1], context);
            MySharedPreferences.setPhone2(array[0], context);
            MySharedPreferences.setPhone1(phone, context);
        }
    }
}

具体都有注释,可以仔细看看

 

4、实际运用

这里我模仿登录成功,就跳转到了另一个Activity去了,如果要查看效果,就又跳转回来实践

 

这里弹出来的提示数据都是在 SharedPreferences 里的,它只能存少量数据

如果有需要可以将数据存入 SQLite 中去