Android EditText中字符大小与光标位置

最近的工作需要自己写一个数字键盘用于数字的输入,采用的方法是自定义一个  Dialog,然后将数字显示在EditText中。在处理过程中遇到遇到一个问题,在EditText的点击事件中屏蔽系统键盘并弹出自定义的Dialog,无法获取用户选中的字符即Selection,造成的问题现象是用户不能选中中间某个位置修改输入值。

  为了解决这一问题,需要在EditText的点击事件中获取Selection。

  解决方法是:1、在EditText点击事件中获取用户点击位置,主要取其中的touchX值(这里主要讨论文字方向为横排的情况);

        2、获取EditText的内边距paddingLeft值(包含左内边距和右内边距,此处仅讨论左对齐情况);

        3、获取文字大小textSize(此值得大小与XML文件中设置的大小和单位有关系,最好使用sp。使用getTextSize方法得到的值是已经经过系统字体大小加权后的值,但不是实际显示的字体大小,实际字体大小应该通过此值乘以textScaleX得到。默认情况下得到的单位为px,其他情况可以使用getTextSize重载的另一个方法,根据单位返回相应的值);

        4、获取EditText的textScaleX(这个值用于计算字体显示的实际大小);

  获取以上值之后就可以来计算字符的实际大小。这里说明一下:汉字、数字、大写字母、小写字母显示大小是不同的,其中汉字大小为textSize*textScaleX,数字大小为textSize*textScaleX/2,字母的大小与具体字母有关。此处仅使用数字来讨论。

  数字大小计算公式:numSize = textSize*textScaleX/2*1.1;//此处乘以1.1的作用是加上数字之间的间隔距离,通过实际测量计算,字符之间间隔是字符大小的0.1倍

  光标位置计算: selection = (int)((touchX - paddingLeft)/(numSize ));//此处直接取整,可将光标定位到第一个字符之前

  另外应检查selection 是否超出EditText中实际字符长度或小于0,并进行相应处理。

时间: 2024-10-03 22:16:25

Android EditText中字符大小与光标位置的相关文章

winform中RichTextBox在指定光标位置插入图片

代码如下: //获取RichTextBox控件中鼠标焦点的索引位置 int startPosition = this.richTextBox1.SelectionStart; //从鼠标焦点处开始选中几个字符 this.richTextBox1.SelectionLength = 2; //清空剪切板,防止里面之前有内容 Clipboard.Clear(); //给剪切板设置图片对象 Bitmap bmp = new Bitmap(@"Images\editredo.png"); Cl

Android EditText中插入图片并响应点击事件

EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现 [mw_shl_code=java,true]eText.append(Html.fromHtml("<img src='" + R.drawable.ohoh + "'/>", imageGetter, null));[/mw_shl_code] 2,通过ImageSpan与SpannableString/SpannableStringBuilder. [m

Android EditText中输入价格判断

EditText 中输入价格判断 mText.addTextChangedListener(new SimpleEditWatcher() { @Override public void afterTextChanged(Editable s) { final String text = s == null ? "" : s.toString(); mClickButton = !TextUtils.isEmpty(text.trim()); int index = text.inde

android EditText中的inputType

android:inputType="none"    android:inputType="text"    android:inputType="textCapCharacters" 字母大写    android:inputType="textCapWords" 首字母大写    android:inputType="textCapSentences" 仅第一个字母大写    android:inpu

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

android EditText获取光标位置并插入字符删除字符1.获取光标位置int index = editText.getSelectionStart(); 2.在光标处插入字符int index = editText.getSelectionStart();Editable editable = editText.getText();editable.insert(index, "aaaa");3.删除光标前字符int index = editText.getSelectionS

android 设置EditText光标位置

Android中有很多可编辑的弹出框,其中有些是让我们来修改其中的字符,这时光标位置定位在哪里呢? 刚刚解了一个bug是关于这个光标的位置的,似乎Android原生中这种情况是把光标定位到字符串的最前面.需求是将光标定位到字符的最后面. 修改的地方是TextView这个控件,因为EditText也是继承了TextView.在setText方法中有: 1  private void setText(CharSequence text, BufferType type,2             

Android tips(十)--&gt;允许模拟位置在Android M下的坑

转载请标明出处:一片枫叶的专栏 本文我们将讲解允许模拟位置在Android M下的坑.做地图类应用的同学应该都知道为了避免软件模拟位置影响正常流程的进行我们一般都会判断用户手机是否打开了模拟位置设置,若打开了则终止用户流程,提醒用户关闭模拟位置设置.在android系统的开发者选项中有一个模拟位置的选项,其作用是允许用户通过代码模拟设备的当前位置,比如地图类应用需要测试在外地的使用情况,通过开启此项选项可以通过代码模拟位置,具体可参考我的:Android中的开发者选项 允许模拟位置的设置选项在手

Android 系统设置中显示设置之休眠和屏保设置篇

Android 系统设置中显示设置之休眠和屏保设置篇 在上一篇中我们学习了Android系统设置中字体大小和屏幕旋转设置基本内容,在这一篇中我们继续学习显示设置中的休眠和屏保设置. 1.休眠设置 首先我们来看一下休眠设置在界面中的定义: 1 <ListPreference 2 android:key="screen_timeout" 3 android:title="@string/screen_timeout" 4 android:summary="

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

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