笔记32 | UI系列之EditText和AutoCompleteTextView

地址

http://blog.csdn.net/xiangyong_1521/article/details/78499706

目录

  • EditText
  • AutoCompleteTextView


1.EditText

简单来说说EditText这个控件,这个就相当于我们平常web开发中的文本输入框,我们如果要使用EditText,可以在布局文件中声明一个这个元素即可,下面就是一个简单的EditText的控件声明:

<EditText 
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="username"/>

对于EditText来说,其最重要的一个属性是 android:inputType,这个属性不仅可以指定键盘的显示类型,还能控制一些其他的操作,具体可以参考android的官方API,其默认属性是 android:inputType="text",也就是普通的键盘框,如果我们设置其属性为以下这些,那么其键盘的类型会有所不同:

<EditText 
        android:id="@+id/password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="password"
        android:inputType="textPassword"/>  这个是我们的密码框

    <EditText
        android:id="@+id/email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="email"
        android:inputType="textEmailAddress"/>  当设置为textEmailAddress时,键盘会多出来一个 @ 符号

    <EditText
        android:id="@+id/blog"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="blog url"
        android:inputType="textUri"/>  设置为textUri时,键盘会多出一个 / 符号

    <EditText
        android:id="@+id/phone"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="phone"
        android:inputType="phone"/>  设置为phone时,键盘就会变成一个打电话时的键盘

    <EditText
        android:id="@+id/counts"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="counts"
        android:inputType="number"/>  设置为number时,键盘上全部都是数字键

对于输入框来说,我们通常都要对其输入的数据进行判断,inputType这个属性不会对我们输入的内容进行校验,如果我们要对输入的内容进行校验,我们需要在Activity里面进行操作 EditText有一个setError的方法,当调用这个方法时,则表示输入的数据不合法,我们来看看官方的API对该方法的解释:

void android.widget.TextView.setError(CharSequence error)

Sets the right-hand compound drawable of the TextView to the "error" icon and sets an error message that will be displayed in a popup when the TextView has focus. The icon and error message will be reset to null when any key events cause changes to the TextView's text. If the error is null, the error message and icon will be cleared.

这个方法会给我们一个错误的小图标以及弹出的一段错误提示信息,当我们的这个EditText控件获得焦点的时候,当我们在文本框中输入了任何的值后,这个icon和message都会消失,例如:


2.AutoCompleteTextView

AutoCompleteTextView这个是一个自动提示内容的文本框,其是EditText的一个子类,

public class AutoCompleteTextView extends EditText

我们通常都是自己定义了一组数据集合,可以是array,可以是list,还可以是网络传过来的数据,这组数据是以下拉菜单的方式根据我们输入的关键字来匹配我们数据集合中满足条件的数据项,通过下拉菜单,我们可以enter来选中我们需要的数据,而为AutoCompleteTextView这个控件提供内容的就是我们的 Adapter ,这个叫做适配器,Adapter这个类的作用就是在我们的Data和我们的View之间架设一座桥梁,我们将我们的数据放置到一个Adapter当中,然后通过指定我们对这些数据的布局方式,再将这个Adapter赋给我们的View。

Adapter是一个接口,其拥有许多的实现类,例如:

android.widget.Adapter

Known Indirect Subclasses:

ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter

我们看到,Android为我们提供了许多的Adapter,这是因为我们的数据可能来自不同的途径,而且对于一些特殊的控件,例如Spinner,我们也要有指定的SpinnerAdapter才行,接下来我们就通过一个例子来实现我们的 AutoCompleteTextView 文本提示功能: XML

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <LinearLayout
        android:id="@+id/llll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" >

        <AutoCompleteTextView
            android:id="@+id/autoCompleteTextView"
            android:layout_width="250dp"
            android:layout_height="wrap_content"
            android:completionHint="最近5条记录"
            android:completionThreshold="2" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="搜索" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:text="清除" />
    </LinearLayout>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/llll"
        android:text="搜索结果:" />

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/white" >

        <TextView
            android:id="@+id/textv"
            android:textSize="30dp"
            android:textColor="@android:color/black"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </RelativeLayout>

</LinearLayout>

Main

public class MainActivity extends Activity {

    @Override  
    public void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        creatView();  
    }  
    ArrayAdapter<String> adapter; 
    AutoCompleteTextView autoCompleteTextView;
    TextView textv;
    String[] si = {"aaa","aab","aac","aad","aae","aaf","aag"};
    StringBuilder builder;
    private void creatView(){
        textv = (TextView) findViewById(R.id.textv);
        autoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView);
        builder = new StringBuilder();
        findViewById(R.id.button).setOnClickListener(new OnClickListener() { //搜索 

            @Override
            public void onClick(View v) {
                String s = autoCompleteTextView.getText().toString();
                builder.append(s+",");
                textv.setText(""+builder.toString());
            }
        });
        findViewById(R.id.button2).setOnClickListener(new OnClickListener() { //清除

            @Override
            public void onClick(View v) {
                builder = new StringBuilder();
                textv.setText("没有搜索结果");
            }
        });
        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,si);
        autoCompleteTextView.setAdapter(adapter);
    }  
}

我们看到,在Activity里面我们定义了一个ArrayAdapter这个类,其有许多的构造方法,我们来看看我们用的这个:

public ArrayAdapter (Context context, int resource, List<T> objects)

Parameters
context    The current context.
resource    加载界面的布局文件
objects    加载数据

也有可在String.xml中添加数据

<string-array name="name">
        <item>aaa</item>
        <item>aab</item>
        <item>aac</item>
        <item>aad</item>
        <item>aae</item>
        <item>aaf</item>
        <item>aag</item>
    </string-array>

加载

String[] name2 = getResources().getStringArray(R.array.name);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, name2);

最后是运行效果


原文发布于微信公众号 - 项勇(xiangy_life)

原文发表时间:2017-11-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SAP最佳业务实践

SAP最佳业务实践:FI–现金管理(160)-21银企对账-供应商付款-承兑汇票-FB70过账供应商发票

4.7 银行对账单-供应商付款-承兑汇票 1、FB60过账供应商发票: 借:办公费用 应交增值税进项税金 贷:应付账款 2、F-36签发银行...

3028
来自专栏吉浦迅科技

GDC 2015 NVIDIA首度展示TITAN X GPU

NVIDIA 於剛結束的 2015 年 GDC 遊戲開發者大會上發表稱為「 Thief in the Shadows 」的嶄新虛擬實境體驗內容,「 Thief ...

2627
来自专栏图形学与OpenGL

8.6.4编程实例-纹理映射

GLubyte stripeImage[4*stripeImageWidth];

762
来自专栏数据小魔方

用R语言复盘美国总统大选结果~

这两天各种社交媒体都被美国大选的消息刷屏,各种段子满天飞,把平时不怎么关注政治的小编都吸引了。 美国大选的投票数据,给小编的写作提供了非常宝贵的案例数据,毕竟四...

4114
来自专栏大数据文摘

100张经典信息可视化图表 看看你的大脑在想什么

1355
来自专栏区块链资讯

慈善机构使用BCH向南苏丹民众提供食物救援

目前,慈善机构Eat BCH开始向非洲东部国家南苏丹缺乏食物的个人和家庭提供食物,而这些食物是该机构使用社区捐赠的比特币现金购买而来。此前,Eat BCH一直在...

943
来自专栏GIS讲堂

Arcgis for Js实现graphiclayer的空间查询

本节讲的是Arcgis for Js的针对graphiclayer的空间查询,内容很简单,代码如下:

602
来自专栏钱塘大数据

100张经典信息可视化图表,让你脑洞大开

01-Redefining the Dome by National Geographic

844
来自专栏专知

2018年SCI期刊最新影响因子排行,最高244,人工智能TPAMI9.455

2018年6月26日,最新的SCI影响因子正式发布,涵盖1万2千篇期刊。CA-Cancer J Clin 依然拔得头筹,其影响因子今年再创新高,达244.585...

952
来自专栏SAP最佳业务实践

从SAP最佳业务实践看企业管理(44)-SD-销售退货账务处理

退货与销售折让是企业经常性的经营行为,若不正确处理这些业务,将会在会计核算上带来很多不便。 下面谈谈常用的账务处理方法。 1、购买方未付货款并且未作账务处理的 ...

2624

扫码关注云+社区