移动焦点从一个的EditText到另一个焦点、EditText

2023-09-07 11:28:52 作者:い娜ル﹏

我设计了一个布局为创建帐户活动。

当一个的EditText 失去焦点,我做输入一番检查,如果事情是不对的我要夺回重点放在的EditText

我已经看到这个一些问题,但它不是为我工作(或者说我做错了什么)。

当我触摸不同的EditText从而引发requestFocus()方法,重点仍然是当前的的EditText 和另一个焦点图标在的EditText 这requeted的焦点。

帮助,请

这是我的布局文件:

 < LinearLayout中的xmlns:机器人=htt​​p://schemas.android.com/apk/res/android的xmlns:定制=htt​​p://schemas.android.com/apk/res/com.cellap.tq机器人:layout_width =FILL_PARENT机器人:layout_height =FILL_PARENT机器人:方向=垂直机器人:可聚焦=真机器人:focusableInTouchMode =真机器人:背景=@绘制/ create_account_background><的LinearLayout    机器人:layout_width =FILL_PARENT    机器人:layout_height =WRAP_CONTENT    机器人:方向=横向    机器人:可聚焦=真    机器人:focusableInTouchMode =真    机器人:layout_marginTop =70dp    机器人:layout_marginLeft =5DP    机器人:layout_marginRight =10dp>    <的TextView        机器人:ID =@ + ID / userTextView        机器人:layout_width =100dp        机器人:layout_height =WRAP_CONTENT        机器人:文字颜色=#F4DF​​A7        机器人:layout_marginRight =5DP        机器人:文字=用户名        机器人:重力=右        机器人:layout_gravity =center_vertical/>    <的EditText        机器人:ID =@ + ID / userEditText        安卓的inputType =TEXT | textEmailAddress        机器人:layout_width =FILL_PARENT        机器人:layout_height =30dp        机器人:paddingLeft =10dp        机器人:paddingRight =10dp        机器人:最大长度=64        机器人:背景=@绘制/ edit_text        机器人:layout_gravity =center_vertical |权        机器人:文字颜色=@机器人:彩色/白>    < /&的EditText GT;< / LinearLayout中>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:方向=横向        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:layout_marginTop =5DP        机器人:layout_marginLeft =5DP        机器人:layout_marginRight =10dp>        <的TextView            机器人:ID =@ + ID / passTextView            机器人:layout_width =100dp            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#F4DF​​A7            机器人:layout_marginRight =5DP            机器人:重力=右            机器人:文字=密码/>        <的EditText            机器人:ID =@ + ID / passEditText            机器人:layout_width =FILL_PARENT            机器人:layout_height =30dp            机器人:paddingLeft =10dp            机器人:paddingRight =10dp            机器人:最大长度=30            机器人:layout_gravity =center_vertical            安卓的inputType =textPassword            机器人:文字颜色=@机器人:彩色/白            机器人:背景=@绘制/ edit_text>        < /&的EditText GT;    < / LinearLayout中>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:方向=横向        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:layout_marginTop =5DP        机器人:layout_marginLeft =5DP        机器人:layout_marginRight =10dp>        <的TextView            机器人:ID =@ + ID / passConfirmTextView            机器人:layout_width =100dp            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#F4DF​​A7            机器人:layout_marginRight =5DP            机器人:重力=右            机器人:文字=确认密码/>        <的EditText            机器人:ID =@ + ID / passConfirmEditText            机器人:layout_width =FILL_PARENT            机器人:layout_height =30dp            机器人:layout_gravity =center_vertical            机器人:paddingLeft =10dp            机器人:paddingRight =10dp            机器人:最大长度=30            安卓的inputType =textPassword            机器人:背景=@绘制/ edit_text            机器人:文字颜色=@机器人:彩色/白>        < /&的EditText GT;    < / LinearLayout中>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:方向=横向        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:layout_marginTop =5DP        机器人:layout_marginLeft =5DP        机器人:layout_marginRight =10dp>        <的TextView            机器人:ID =@ + ID / emailTextView            机器人:layout_width =100dp            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#F4DF​​A7            机器人:layout_marginRight =5DP            机器人:重力=右            机器人:文字=电子邮件/>        <的EditText            机器人:ID =@ + ID / emailEditText            机器人:layout_width =FILL_PARENT            机器人:layout_height =30dp            机器人:layout_gravity =center_vertical            机器人:paddingLeft =10dp            机器人:paddingRight =10dp            机器人:最大长度=255            机器人:scrollHorizo​​ntally =假            安卓的inputType =textEmailAddress            机器人:背景=@绘制/ edit_text            机器人:文字颜色=@机器人:彩色/白>        < /&的EditText GT;    < / LinearLayout中>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:方向=横向        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:layout_marginTop =5DP        机器人:layout_marginLeft =5DP        机器人:layout_marginRight =10dp>        <的TextView            机器人:ID =@ + ID / confirmEmailTextView            机器人:layout_width =100dp            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#F4DF​​A7            机器人:layout_marginRight =5DP            机器人:重力=右            机器人:文字=确认电子邮件/>        <的EditText            机器人:ID =@ + ID / confirmEmailEditText            机器人:layout_width =FILL_PARENT            机器人:layout_height =30dp            机器人:layout_gravity =center_vertical            机器人:最大长度=255            机器人:paddingLeft =10dp            机器人:paddingRight =10dp            安卓的inputType =textEmailAddress            机器人:背景=@绘制/ edit_text            机器人:文字颜色=@机器人:彩色/白>        < /&的EditText GT;    < / LinearLayout中>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:方向=横向        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:layout_marginTop =5DP        机器人:layout_marginLeft =5DP        机器人:layout_marginRight =10dp>        <的TextView            机器人:ID =@ + ID / signupTextView            机器人:layout_width =100dp            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#F4DF​​A7            机器人:layout_marginRight =5DP            机器人:重力=右            机器人:文字=注册/>        <的TextView            机器人:ID =@ + ID / signUpText            机器人:layout_width =FILL_PARENT            机器人:layout_height =WRAP_CONTENT            机器人:layout_gravity =center_vertical            机器人:文字颜色=#FF0000            机器人:paddingRight =5DP            />    < / LinearLayout中>    < com.cellap.tq.ButtonView        机器人:ID =@ + ID / create_btn         机器人:layout_width =216dp        机器人:layout_height =49dp        机器人:layout_gravity =CENTER_HORIZONTAL        机器人:layout_marginTop =30dp        机器人:可聚焦=真        机器人:focusableInTouchMode =真        定制:按钮=create_btn/>    <的LinearLayout        机器人:layout_width =FILL_PARENT        机器人:layout_height =WRAP_CONTENT        机器人:可聚焦=真        机器人:focusableInTouchMode =真        机器人:方向=横向        机器人:layout_marginTop =15dp        机器人:layout_marginBottom =5DP        机器人:layout_marginLeft =30dp        机器人:layout_marginRight =30dp>        <按钮            机器人:ID =@ + ID / fbconnect_btn            机器人:layout_width =WRAP_CONTENT            机器人:layout_height =WRAP_CONTENT            机器人:可聚焦=真            机器人:focusableInTouchMode =真            机器人:layout_marginRight =5DP            机器人:背景=@绘制/ fbconnect_btn/>    < / LinearLayout中> 

为什么win10自带的移动热点不能打开了,一点

在code我做这样的:

 最后的EditText userEditText =(EditText上)findViewById(R.id.userEditText);    userEditText.setOnFocusChangeListener(新OnFocusChangeListener(){        @覆盖        公共无效onFocusChange(视图V,布尔hasFocus){            如果(!hasFocus){                Log.i(TAGuserEditText失去焦点);                。m_userName = userEditText.getText()的toString();                如果(m_userName.length()6;){                    m_signUpText.setText(用户名应该至少有6个字符);                    userEditText.requestFocus();                }                其他{                    checkUserNameExists();                }            }        }    }); 

解决方案

找到了解决办法这里

此解决方案(无需添加机器人:可聚焦=真\\机器人:focusableInTouchMode =真):

 最后的EditText userEditText =(EditText上)findViewById(R.id.userEditText);userEditText.setOnFocusChangeListener(新OnFocusChangeListener(){    @覆盖    公共无效onFocusChange(视图V,布尔hasFocus){        如果(!hasFocus){            Log.i(TAGuserEditText失去焦点);            如果(空== m_requestFocus){                。m_userName = userEditText.getText()的toString();                如果(m_userName.length()6;){                    m_signUpText.setText(用户名应该至少有6个字符);                    m_requestFocus = userEditText;                }                其他{                    checkUserNameExists();                }            }        }        其他{            如果(空= m_requestFocus&安培;!m_requestFocus = userEditText){                v.clearFocus();                m_requestFocus.requestFocus();                m_requestFocus = NULL;            }        }    }}); 

要澄清的问题:

用户编辑的EditText A - >用户触摸的EditText B到编辑 - >的EditText一个onFocusListener.onFocusChanged被称为 - > EditText上一个requestFocus的 - >的EditText乙仍然成为焦点并输入任何文字,写它的编辑文本。唯一的焦点的标志,出现在一个的EditText

I designed a layout for a create account activity.

when one EditText loses focus, I'm doing some checking on the input and if something is not right I want to regain the focus on that EditText.

I already saw some questions about this, but its not working for me (or I'm doing something wrong).

when I touch on a different EditText which triggers the requestFocus(), the focus remains on the current EditText and another focus icon is shown in the EditText which requeted the focus.

help please

here's my layout file:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.cellap.tq"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:focusable="true" 
android:focusableInTouchMode="true"
android:background="@drawable/create_account_background" >

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:focusable="true" 
    android:focusableInTouchMode="true"
    android:layout_marginTop="70dp"
    android:layout_marginLeft="5dp"
    android:layout_marginRight="10dp">

    <TextView 
        android:id="@+id/userTextView"
        android:layout_width="100dp"
        android:layout_height="wrap_content"
        android:textColor="#F4DFA7"
        android:layout_marginRight="5dp"
        android:text="Username"
        android:gravity="right"
        android:layout_gravity="center_vertical"/>

    <EditText
        android:id="@+id/userEditText"
        android:inputType="text|textEmailAddress"
        android:layout_width="fill_parent"

        android:layout_height="30dp"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:maxLength="64"
        android:background="@drawable/edit_text"
        android:layout_gravity="center_vertical|right"
        android:textColor="@android:color/white">

    </EditText>
</LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:focusable="true" 
        android:focusableInTouchMode="true" 
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp">

        <TextView 
            android:id="@+id/passTextView"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#F4DFA7"
            android:layout_marginRight="5dp"
            android:gravity="right"
            android:text="Password"/>

        <EditText
            android:id="@+id/passEditText"
            android:layout_width="fill_parent"
            android:layout_height="30dp"

            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:maxLength="30"
            android:layout_gravity="center_vertical"
            android:inputType="textPassword"
            android:textColor="@android:color/white"
            android:background="@drawable/edit_text">


        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:focusable="true" 
        android:focusableInTouchMode="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp">

        <TextView 
            android:id="@+id/passConfirmTextView"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#F4DFA7"
            android:layout_marginRight="5dp"
            android:gravity="right"
            android:text="Confirm password"/>

        <EditText
            android:id="@+id/passConfirmEditText"
            android:layout_width="fill_parent"
            android:layout_height="30dp"

            android:layout_gravity="center_vertical"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:maxLength="30"
            android:inputType="textPassword"
            android:background="@drawable/edit_text"
            android:textColor="@android:color/white">


        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:focusable="true" 
        android:focusableInTouchMode="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp">

        <TextView 
            android:id="@+id/emailTextView"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#F4DFA7"
            android:layout_marginRight="5dp"
            android:gravity="right"
            android:text="Email"/>

        <EditText
            android:id="@+id/emailEditText"
            android:layout_width="fill_parent"
            android:layout_height="30dp"

            android:layout_gravity="center_vertical"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:maxLength="255"
            android:scrollHorizontally="false" 
            android:inputType="textEmailAddress"
            android:background="@drawable/edit_text"
            android:textColor="@android:color/white">


        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp">

        <TextView 
            android:id="@+id/confirmEmailTextView"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#F4DFA7"
            android:layout_marginRight="5dp"
            android:gravity="right"
            android:text="Confirm email"/>

        <EditText
            android:id="@+id/confirmEmailEditText"
            android:layout_width="fill_parent"
            android:layout_height="30dp"

            android:layout_gravity="center_vertical"
            android:maxLength="255"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:inputType="textEmailAddress"
            android:background="@drawable/edit_text"
            android:textColor="@android:color/white">


        </EditText>
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal" 
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="10dp">

        <TextView 
            android:id="@+id/signupTextView"
            android:layout_width="100dp"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#F4DFA7"
            android:layout_marginRight="5dp"
            android:gravity="right"
            android:text="Sign up:"/>

        <TextView 
            android:id="@+id/signUpText"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center_vertical"
            android:textColor="#FF0000"
            android:paddingRight="5dp"

            />



    </LinearLayout>


    <com.cellap.tq.ButtonView
        android:id="@+id/create_btn"
         android:layout_width="216dp"
        android:layout_height="49dp"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="30dp"
        android:focusable="true"
        android:focusableInTouchMode="true"
        custom:button="create_btn"/>


    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:orientation="horizontal"
        android:layout_marginTop="15dp"
        android:layout_marginBottom="5dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp">

        <Button 
            android:id="@+id/fbconnect_btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:focusable="true"
            android:focusableInTouchMode="true"
            android:layout_marginRight="5dp"
            android:background="@drawable/fbconnect_btn"/>

    </LinearLayout>

in the code I do like that:

final EditText userEditText = (EditText)findViewById(R.id.userEditText);

    userEditText.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(!hasFocus){
                Log.i(TAG, "userEditText lost focus");

                m_userName = userEditText.getText().toString();
                if(m_userName.length() < 6){
                    m_signUpText.setText("Username should have at least 6 characters");
                    userEditText.requestFocus();
                }
                else{
                    checkUserNameExists();
                }

            }
        }
    });

解决方案

found a solution here

This solution works (no need to add android:focusable="true"\android:focusableInTouchMode="true"):

final EditText userEditText = (EditText)findViewById(R.id.userEditText);

userEditText.setOnFocusChangeListener(new OnFocusChangeListener() {

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if(!hasFocus){
            Log.i(TAG, "userEditText lost focus");
            if(null == m_requestFocus){
                m_userName = userEditText.getText().toString();
                if(m_userName.length() < 6){
                    m_signUpText.setText("Username should have at least 6 characters");
                    m_requestFocus = userEditText;
                }
                else{
                    checkUserNameExists();
                }
            }
        }
        else{
            if(null != m_requestFocus & m_requestFocus != userEditText){
                v.clearFocus();
                m_requestFocus.requestFocus();
                m_requestFocus = null;
            }
        }
    }
});

To clarify the problem:

User edits EditText A -> user touch EditText B to edit it -> EditText A onFocusListener.onFocusChanged is called -> EditText A requestFocus -> EditText B still has the focus and typing any text, writes to its edit text. only a marker of focus, appears on EditText A.

 
精彩推荐
图片推荐