【移动应用开发技术】怎么在Android中使用EditText追加空格_第1页
【移动应用开发技术】怎么在Android中使用EditText追加空格_第2页
【移动应用开发技术】怎么在Android中使用EditText追加空格_第3页
【移动应用开发技术】怎么在Android中使用EditText追加空格_第4页
【移动应用开发技术】怎么在Android中使用EditText追加空格_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】怎么在Android中使用EditText追加空格

今天就跟大家聊聊有关怎么在Android中使用EditText追加空格,可能很多人都不太了解,为了让大家更加了解,在下给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。追加字符借鉴博客EditText每4位自动添加空格import

android.content.Context;

import

android.text.Editable;

import

android.text.TextUtils;

import

android.text.TextWatcher;

import

android.util.AttributeSet;

import

com.ifreegroup.ebbly.lib_common.utils.AppLogUtil;

/**

*

@Describe:自动添加占位符的输入框

*/

public

class

PlaceHolderEditText

extends

android.support.v7.widget.AppCompatEditText

{

//上次输入框中的内容

private

String

lastString;

//光标的位置

private

int

selectPosition;

//输入框内容改变监听

private

TextChangeListener

listener;

//追加字符

private

String

item

=

"-";

public

PlaceHolderEditText(Context

context)

{

super(context);

initView();

}

public

PlaceHolderEditText(Context

context,

AttributeSet

attrs)

{

super(context,

attrs);

initView();

}

public

PlaceHolderEditText(Context

context,

AttributeSet

attrs,

int

defStyleAttr)

{

super(context,

attrs,

defStyleAttr);

initView();

}

private

void

initView()

{

addTextChangedListener(new

TextWatcher()

{

@Override

public

void

beforeTextChanged(CharSequence

s,

int

start,

int

count,

int

after)

{

}

/**

*

当输入框内容改变时的回调

*

@param

s

改变后的字符串

*

@param

start

改变之后的光标下标

*

@param

before

删除了多少个字符

*

@param

count

添加了多少个字符

*/

@Override

public

void

onTextChanged(CharSequence

s,

int

start,

int

before,

int

count)

{

//因为重新排序之后setText的存在

//会导致输入框的内容从0开始输入,这里是为了避免这种情况产生一系列问题

if

(start

==

0

&&

count

>

1

&&

getSelectionStart()

==

0)

{

return;

}

String

textTrim

=

getText().toString().trim();

if

(TextUtils.isEmpty(textTrim))

{

return;

}

//如果

before

>0

&&

count

==

0,代表此次操作是删除操作

if

(before

>

0

&&

count

==

0)

{

selectPosition

=

start;

if

(TextUtils.isEmpty(lastString))

{

return;

}

//将上次的字符串去空格

改变之后的字符串去空格

进行比较

//如果一致,代表本次操作删除的是空格

if

(textTrim.equals(lastString.replaceAll(item,

"")))

{

//帮助用户删除该删除的字符,而不是空格

StringBuilder

stringBuilder

=

new

StringBuilder(lastString);

stringBuilder.deleteCharAt(start

-

1);

selectPosition

=

start

-

1;

setText(stringBuilder.toString());

}

}

else

{

//此处代表是添加操作

//当光标位于空格之前,添加字符时,需要让光标跳过空格,再按照之前的逻辑计算光标位置

if

((start

+

count)

%

5

==

0)

{

selectPosition

=

start

+

count

+

1;

}

else

{

selectPosition

=

start

+

count;

}

}

}

@Override

public

void

afterTextChanged(Editable

s)

{

//获取输入框中的内容,不可以去空格

String

etContent

=

getText().toString();

if

(TextUtils.isEmpty(etContent))

{

if

(listener

!=

null)

{

listener.textChange("");

}

return;

}

//重新拼接字符串

String

newContent

=

addSpaceByCredit(etContent);

//保存本次字符串数据

lastString

=

newContent;

//如果有改变,则重新填充

//防止EditText无限setText()产生死循环

if

(!newContent.equals(etContent))

{

setText(newContent);

try

{

//保证光标的位置

setSelection(selectPosition

>

newContent.length()

?

newContent.length()

:

selectPosition);

}

catch

(Exception

e)

{

//刚好为限制字符的整数倍时添加空格后会出现越界的情况

//AppLogUtil.e("超过限制字符");

}

}

//触发回调内容

if

(listener

!=

null)

{

listener.textChange(newContent);

}

}

});

}

/**

*

输入框内容回调,当输入框内容改变时会触发

*/

public

interface

TextChangeListener

{

void

textChange(String

text);

}

public

void

setTextChangeListener(TextChangeListener

listener)

{

this.listener

=

listener;

}

/**

*

每4位添加一个空格

*

*

@param

content

*

@return

*/

public

String

addSpaceByCredit(String

content)

{

if

(TextUtils.isEmpty(content))

{

return

"";

}

content

=

content.replaceAll(item,

"");

if

(TextUtils.isEmpty(content))

{

return

"";

}

StringBuilder

newString

=

new

StringBuilder();

for

(int

i

=

1;

i

<=

content.length();

i++)

{

if

(i

%

4

==

0

&&

i

!=

content.length())

{

newString.append(content.charAt(i

-

1)

+

item);

}

else

{

newString.append(content.charAt(i

-

1));

}

}

return

newString.toString();

}

/**

*

获取追加字符前输入内容

*

@return

*/

public

String

getInputText()

{

return

getText().toString().replaceAll(item,

"");

}

} 核心思路是在文本改变时获取到原字符串取出每一个字符添加上要追加的字符后返回字符串并重新setText。当然中间会有一些坑,比如光标位置、删除时空格要跳过以及删除后会再追加空格会造成死循环的问题。当然这里很多情况已经处理过了,如果有其他需求比如手机号码的11111111111的形式可以修改addSpaceByCredit这个方法。限制字符借鉴博客AndroidEditText限制输入字符的5种实现方式

et_traveler_content.addTextChangedListener(new

TextWatcher()

{

@Override

public

void

beforeTextChanged(CharSequence

s,

int

start,

int

count,

int

after)

{

}

@Override

public

void

onTextChanged(CharSequence

s,

int

start,

int

before,

int

count)

{

String

editable

=

et_traveler_content.getText().toString();

String

str

=

stringFilter(editable.toString());

if

(!editable.equals(str))

{

et_traveler_content.setText(str);

//设置新的光标所在位置

et_traveler_content.setSelection(et_traveler_content.getText().toString().length());

}

}

@Override

public

void

afterTextChanged(Editable

s)

{

}

});

public

String

stringFilter(String

str)

{

//

只允许字母、数字、英文空白字符

String

regEx

=

"[^a-zA-Z0-9\\s]";

Pattern

p

=

Ppile(regEx);

Matcher

m

=

p.matcher(str);

return

m.replaceAll("");

} 这里也是输入时做过滤然后重新setText。只要需要对正则表达式熟悉想做什么限制都可以。MD效果系统自带

<android.support.design.widget.TextInputLayout

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginStart="15dp"

android:padding="0dp"

android:layout_centerVertical="true"

android:gravity="center_vertical">

<EditText

……

/>

</android.support.design.widget.TextInputLayout>只需要用TextInputLayout包裹一层便可以实现MD效果。常用属性1.明文、密文

if

(isShowPwd)

{

/

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论