我正在开发 Android 智能电视应用程序:
在一个
view
中有一个自定义键盘和一个EditText
。当应用程序启动时,焦点会移到键盘上。
期望的:
- 当用户使用键盘 (通过遥控器点击) 输入时,光标也应该闪烁在
editText
内部。
- 当用户使用键盘 (通过遥控器点击) 输入时,光标也应该闪烁在
如何在 EditText
内显示这个效果?
我正在开发 Android 智能电视应用程序:
在一个 view
中有一个自定义键盘和一个 EditText
。
当应用程序启动时,焦点会移到键盘上。
期望的:
editText
内部。如何在 EditText
内显示这个效果?
如果您为字段设置了背景,则会发生这种情况。如果您想解决此问题,请将cursorDrawable
设置为@null
。
您应该添加textCursorDrawable
和cursorVisible
。
引用将在插入光标下绘制的可绘制对象。
android:cursorVisible="true"
android:textCursorDrawable="@null"
android:background="@color/transparent"
。 - CoolMind您可以尝试以下方法:
editText.setText(text);
editText.setPressed(true);
editText.setSelection(editText.getText().length()); // moves the cursor to the end of the text
The cursor will not blink. The logic for the blinking is in the Editor class and cannot be overridden. It requires that the EditText is focused, and only 1 View can be focused at once within a Window - in your case that will be one of the keyboard buttons.
/**
* @return True when the TextView isFocused and has a valid zero-length selection (cursor).
*/
private boolean shouldBlink() {
if (!isCursorVisible() || !mTextView.isFocused()) return false;
...
}
private void blink() {
if (shouldBlink) {
editText.setText(editText.getText());
editText.setPressed(true);
editText.setSelection(editText.getText().length());
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (shouldBlink) {
blink();
}
}
}, 500);
}
}
EditText
的右端。 - CoolMind您可以这样做...我希望/认为您已经创建了按钮的布局,通过这个布局,您可以为其设置一个焦点监听器,在onFocusChange方法中,您可以检查if(layout.hasFocus())
并执行以下操作...
例如,如果您的editText命名为et,则可以将其设置为:
et.setActivated(true);
et.setPressed(true);
我为您准备了一个小示例代码,其中有两个编辑框。
et2.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(et2.hasFocus()){
//et1.setCursorVisible(true);
et1.setActivated(true);
et1.setPressed(true);
}
}
});
<requestFocus/>
simply add
editText.requestFocus();
android:cursorVisible="true"
2) Java
mEditText.setOnClickListener(editTextClickListener);
OnClickListener editTextClickListener = new OnClickListener() {
public void onClick(View v) {
if (v.getId() == mEditText.getId()) {
mEditText.setCursorVisible(true);
}
}
};
or
if (mEditText.hasFocus()){
mEditText.setCursorVisible(true);
}
我知道这是个老帖子,但这个解决方案比上面的方案好多了。只需扩展EditText
并添加以下内容:
@Override
public boolean isCursorVisible() {
return true;
}
@Override
public boolean isFocused() {
return true;
}
在您的XML文件中:
<com.foo.MyEditText
...
android:focusable="false"
android:focusableInTouchMode="false"
android:clickable="false"
android:cursorVisible="true"/>
EditText
认为它已经获得了焦点并且光标是可见的,但实际上它无法获得焦点。 private void setFocusCursor(){
mBinding.replyConversationsFooter.footerEditText.setFocusable(true);
`mBinding.replyConversationsFooter.footerEditText.setFocusableInTouchMode(true);`
`mBinding.replyConversationsFooter.footerEditText.requestFocus();`
}
只需在oncreateView()中调用此函数,就可以实现这一点。我们只能在一个窗口上设置一个焦点。因此,这样做将有助于解决您的问题。
//Get the EditText using
EditText et = (EditText)findViewById(R.id.editText);
//Set setCursorVisible to true
et.setCursorVisible(true);
You can explicitly put caret to last position in text:
int pos = editText.getText().length();
editText.setSelection(pos);
android:focusable="true"