android EditText获取光标位置并插入字符删除字符

本文展示了如何在Android中操作EditText的光标,包括在光标位置插入字符、删除字符。通过监听EditText和按钮点击事件,动态调整光标位置,并实现了文本的增删功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.获取光标位置
 
[java] 
int index = editText.getSelectionStart();  
2.在光标处插入字符
 
[java] 
int index = editText.getSelectionStart();  
Editable editable = editText.getText();  
editable.insert(index, "aaaa");  
 
3.删除光标前字符
 
[java] 
 
int index = editText.getSelectionStart();
Editable editable = editText.getText();
editable.delete(index-1, index);

当时在项目中使用的方法
  public void deleteNumb()
  {//删除光标所在的数字
      int index = editText.getSelectionStart();
      if (editText.length() != 0&&index>0) {
          Editable editable = editText.getText();
          editable.delete(index-1, index);
      } else {
          stringBuffer.delete(0, stringBuffer.length());
      }
}
//这是一个通过自定义的键盘输入电话号的 方法
    @Override
    public void onGridItemClick(String s) {
       // addNumber(s);
        int index = editText.getSelectionStart();
        Editable editable = editText.getText();
        editable.insert(index, s);
//        stringBuffer.append(s);
//        editText.setText(stringBuffer.toString());
//        editText.setSelection(editText.getText().length());
//        editText.requestFocus();
    }


以及一个通过控制光标显示隐藏来茶如删除字符的类

public class TestActivity extends Activity{

private EditText phoneText;

private boolean phoneTextCursor = false;

private Button backBut,num1;

public void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);
   setContentView(R.layout.main);

   num1 = (Button)findViewById(R.id.num_1);

   backBut = (Button)this.findViewById(R.id.backBut);
   phoneText = (EditText) findViewById(R.id.phoneNum);

   phoneText.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    if(phoneText.getText().toString().trim().length()>0){

           //设置光标为可见状态
           phoneText.setCursorVisible(true);
           phoneTextCursor = true;
    }
   }});

 

   num1.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    downKey("1");
   }
   });

 

   backBut.setOnClickListener(new OnClickListener(){

   @Override
   public void onClick(View v) {
    StringBuffer sb = new StringBuffer(phoneText.getText().toString().trim());
    int index = 0;
    if(phoneTextCursor==true)
    {
     index = phoneText.getSelectionStart();
     if(index>0){
      sb = sb.delete(index-1, index);
     }
    }
    else{
     index = phoneText.length();
     if(index>0){
      sb = sb.delete(index-1, index);
     }
    }
    phoneText.setText(sb.toString());
    if(index>0){
     Selection.setSelection(phoneText.getText(), index-1);
    }
    if(phoneText.getText().toString().trim().length()<=0)
    {
     phoneText.setCursorVisible(false);
     phoneTextCursor = false;
    }
   }});

 

 //按钮事件触发手动调用此方法

public void downKey(String key)

{
     //设置一个变量判断是否有光标
   if(phoneTextCursor==true)
  {
   //获得光标的位置
   int index = phoneText.getSelectionStart();
   //将字符串转换为StringBuffer
   StringBuffer sb = new StringBuffer(phoneText.getText().toString().trim());
   //将字符插入光标所在的位置
   sb = sb.insert(index, key);
   phoneText.setText(sb.toString());
   //设置光标的位置保持不变
   Selection.setSelection(phoneText.getText(), index+1);
  }
  else
  {
   phoneText.setText(phoneText.getText().toString().trim() + key);
  }
     //手机振动
  toVibrate();
    }

附赠一个查新本地通讯录的方法
/**
 * 查询本地通讯录
 */
private List<JsonObject> searchContact(String name, String phone) {
    List<JsonObject> lists = new ArrayList<>();
    if ((TextUtils.isEmpty(name) && TextUtils.isEmpty(phone)) || contactList.size() == 0) {
        return lists;
    }
    if (!TextUtils.isEmpty(name)) {
        for (CrmModel crmModel : contactList) {
            if (crmModel.getModel_name().contains(name)) {
                try {
                    String jsonStr = new Gson().toJson(crmModel);
                    JsonObject jsonObject = new JsonObject();
                    jsonObject.addProperty(CrmSearchActivity.CONTACT_KYE, jsonStr);
                    lists.add(jsonObject);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return lists;
    }
    if (!TextUtils.isEmpty(phone)) {
        for (CrmModel crmModel : contactList) {
            if (crmModel.getOut_columns_value().contains(phone)) {
                try {
                    String jsonStr = new Gson().toJson(crmModel);
                    JsonObject jsonObject = new JsonObject();
                    jsonObject.addProperty(CrmSearchActivity.CONTACT_KYE, jsonStr);
                    lists.add(jsonObject);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
    return lists;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值