android文本框光标的获取,添加删除文字

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();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Linux 下获取第三方应用程序的文本框光标位置,需要先了解 Linux 下的 X Window 系统。X Window 是 Linux 下的图形用户界面的基础,它可以通过程序接口 Xlib 来控制和获取窗口的信息。 通过 Xlib,我们可以获取窗口的 ID,然后使用 X Window 事件来监听该窗口的操作,比如鼠标点击、鼠标移动、键盘输入等。而获取文本框光标位置,就需要监听键盘事件,然后判断光标是否在文本框中,并获取光标的位置。 具体实现可以借助 GTK 或 Qt 等 GUI 库,它们提供了更高层次的接口,方便我们操作窗口和控件。例如,使用 GTK 可以通过以下代码获取当前激活窗口的文本框光标位置: ```c #include <gtk/gtk.h> // 回调函数,用于监听键盘事件 gboolean on_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data) { // 获取当前激活窗口 GdkWindow *window = gtk_widget_get_window (gtk_window_get_focus (GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL)))); // 获取鼠标位置,转换为窗口内的坐标系 gint x, y; gdk_window_get_device_position (window, event->device, &x, &y, NULL); gdk_window_get_origin (window, &x, &y); gdk_window_get_device_position (window, event->device, &x, &y, NULL); // 获取当前窗口内的控件,判断光标是否在文本框中 GtkWidget *widget_at_point = gtk_widget_get_ancestor (gtk_window_get_focus (GTK_WINDOW (gtk_window_new (GTK_WINDOW_TOPLEVEL))), GTK_TYPE_ENTRY); if (widget_at_point != NULL && GTK_IS_ENTRY (widget_at_point)) { gint start, end; gtk_editable_get_selection_bounds (GTK_EDITABLE (widget_at_point), &start, &end); GtkEntryBuffer *buffer = gtk_entry_get_buffer (GTK_ENTRY (widget_at_point)); gint cursor_position = gtk_entry_buffer_get_cursor_position (buffer); if (start <= cursor_position && cursor_position <= end) { // 光标文本框中,返回光标位置 g_print ("The cursor position in the text box is %d\n", cursor_position); } } return FALSE; } int main (int argc, char *argv[]) { GtkWidget *window; gtk_init (&argc, &argv); window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (on_key_press), NULL); gtk_widget_show_all (window); gtk_main (); return 0; } ``` 以上代码使用 GTK 构建了一个窗口,并监听了窗口的键盘事件。当用户按下任意键时,会获取当前激活窗口的 ID,并通过 gdk_window_get_device_position() 函数获取鼠标位置,然后判断光标是否在文本框中。如果光标文本框中,就获取文本框光标位置,并输出到终端上。 当然,以上代码只是一种实现方式,如果你使用的是其他 GUI 库,可能需要使用不同的 API。不过基本思路都是类似的,需要监听键盘事件,并通过窗口 ID、鼠标位置和控件类型来判断光标位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值