当前位置: 首页 > 知识库问答 >
问题:

如何强制焦点编辑文本

宋昕
2023-03-14

我读了关于如何设置一个对象聚焦的问题,但是我似乎找不到任何一个答案来回答我想做的事情。

使用On Focus侦听器,我完成了以下操作:

  Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (Ehour.getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
Ehour.setFocusable(true);
Ehour.requestFocus();


                }
            }
        }});

我尝试了以下帖子中的建议:

我读了这篇文章,但使用这些建议似乎也不起作用:如何在创建和显示布局时设置视图的焦点?

我的目标是,当编辑文本焦点丢失时,如果给定的条目无效,我需要移回它。

此外,根据Bill Mote的建议,我还尝试了:

 Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (Ehour.getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    Ehour.setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));

                    ((EditText)arg0).requestFocus();

                }
            }
        }});

**编辑**我甚至在requestFocus()之前添加了下面的一行:

((EditText)arg0).setFocusable(true);

***编辑****

已从此帖子中尝试:停止EditText在活动启动时获得焦点

以下更改:在我添加的第一个布局标题处的布局中:

android:id="@+id/enterdata"
android:descendantFocusability="beforeDescendants"
android:focusableInTouchMode="true"

然后在OnChangeFocusListener中,我做了以下操作:

Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (((EditText)arg0).getText().length()<=0) {
                    Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();
                    Calendar nohour = Calendar.getInstance();
                    ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
                    findViewById(R.id.enterdata).requestFocus();
                    ((EditText)arg0).setFocusable(true);
                    ((EditText)arg0).setFocusableInTouchMode(true);
                    ((EditText)arg0).requestFocus();

                }
            }
        }});

然而,我仍然得到与以前相同的行为,焦点所在的编辑文本保持这种方式,但我希望焦点所在的编辑文本看起来是焦点,但它似乎无法被使用,好像它仍在等待焦点。

***编辑***

下面的代码是根据最近在stackoverflow上发现的帖子,其中问这个问题的用户遇到了和我一样的问题:

 Ehour.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View arg0, boolean arg1) {
            // TODO Auto-generated method stub
            if (!arg1) {
                if (((EditText)arg0).getText().length()<=0) {

                    Calendar nohour = Calendar.getInstance();
                    ((EditText)arg0).setText(numberformatter(nohour.get(Calendar.HOUR_OF_DAY)));
                    if (((EditText)arg0).requestFocus()) {
                         getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                         Emin.clearFocus();   
                         Toast.makeText(getApplicationContext(), "No Hour Entered", Toast.LENGTH_LONG).show();  
                    }


                }
            }
        }});

共有3个答案

汪同
2023-03-14
new OnEditorActionListener(){
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      editText.requestFocus();
      //used ******* return true ******
      return **true**;
   }
} 
哈泰
2023-03-14

我也有同样的问题,这里是我用来解决的代码:

EditText editText = (EditText) findViewById(R.id.myTextViewId);
editText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);

顺致敬意,

终彬郁
2023-03-14

尝试arg0。requestFocus()

不确定是否View在我的脑海中实现了请求焦点(),所以您可能必须将其...((EditText)arg0)。请求焦点()

 类似资料:
  • 我有一个编辑文本。我希望这个编辑文本始终保持焦点和可写性。我怎么能每次都不碰它呢?因为条形码扫描器机器将数据连续发送到此应用程序。 我尝试了很多方法。但它们都不起作用。我可以设置键盘是可见的,但光标不在编辑文本上。

  • 当EditText具有焦点并且出现软键盘并按下任何键时,我正在尝试清理EditText。我正在使用OnFocus usChangeListener方法来检测EditText何时具有焦点,但我不知道如何在相同的方法中实现键盘事件。 有人能帮我吗?非常感谢。亲切的问候

  • 我想得到一个文本字段,每当我点击/点击/聚焦该字段时,它可以选择该字段中当前的全部文本。我自己也在其他React应用程序中使用了一个执行,但这种方法似乎不适用于材质UI。使用Material UI TextFields,我可以看到所选内容简短地覆盖了全文,然后返回到文本末尾闪烁的光标。 你知道怎么做吗?

  • 当我点击ListFragment中的EditText(请参见“您的答案…”字段是下面的屏幕上限)时,它不会保持焦点,因此无法使用。文本光标一出现在EditText字段上,它就会迅速消失,EditText域就会失去焦点。 我发现了一些相关的堆栈帖子,并怀疑有什么东西可能从EditText中窃取了焦点。请参阅此处的相关帖子。我也读过关于强迫聚焦的帖子,但没有什么意义。 我可以以编程方式构建视图,但是使

  • 软件是 VScode 我尝试使用shift+enter之类的都不行。 这个有 一个 比较详细的术语,或者视频,使用文档吗? (因为我不想换个语言或者编译器就还得重新提问,求告知 换成visual stdio就方 按什么键?

  • 是否可以使可单击但不可编辑。 我不希望它是可编辑的(键盘也不应该出现,我们也不应该改变提示) 实际上,我只想使用编辑文本作为带有提示的图像(不能更改)。我知道实际的方法是使用一个和一个,但我希望它尝试使用,因为这样我将只使用一个视图,而不是2个。而且每件事都是动态的,所以没有XML。 对于上述需求,XML中的解决方案是android:editable=“false”,但我想在Java中使用它。 但