Android - EditText在type为password时获取物理长度

时间:2017-09-29 11:38:50

标签: android

我正在尝试获取EditText值的物理长度(以像素为单位),但是当它是密码时,我得到密码值的长度,而不是所有点的长度。

例如,我在编辑文本中添加了“Hello”,当我尝试获取它的长度时,它与执行相同:

override def merge(buffer1: MutableAggregationBuffer, buffer2: Row) = {
  val map1: Map[K, V] = buffer1.getMap[K, V](0)
  val map2: Map[K, V] = buffer2.getMap[K, V](0)

  val m = implicitly[Monoid[Map[K, V]]]

  buffer1(0) = m.combine(map1, map2)
}

但我希望得到这个的长度 enter image description here
“密码:”是我添加的前缀,它不属于EditText值本身

如果有人可以帮助我,我们将不胜感激

3 个答案:

答案 0 :(得分:2)

使用

Rect bounds = new Rect(); 
Paint textPaint = edittext.getPaint(); 
textPaint.getTextBounds(edittext.getText().toString(), 
0,edittext.getText().length(), bounds); 
int height = bounds.height();
int width = bounds.width(); Toast.makeText(LoginActivity.this, ""+width, 
Toast.LENGTH_SHORT).show();

答案 1 :(得分:2)

我猜测密码EditText打印的实际字符将是Unicode Bullet字符之一。例如,如果它是U + 2022,那么你可以使用。

StringBuilder sb = new StringBuilder();
int n = inputPassword.getText().length();
while (n-- > 0) sb.append('\u2022');

double width = inputPassword.getPaint()
        .measureText(sb.toString());

答案 2 :(得分:0)

*不幸的是,它只返回绘制字体的长度而不是点。

content = editText.getText();
Rect bounds = new Rect();
Paint textPaint = editText.getPaint();
textPaint.getTextBounds(content, 0, content.length(), bounds);
int width = bounds.width();// This is the the length of the contents in pixels(painted).

希望它有所帮助。