2011-12-25 3 views
1

계정 만들기 활동을위한 레이아웃을 디자인했습니다.한 EditText에서 다른 EditText로 포커스 이동

EditText 중 하나가 포커스를 잃었을 때 입력에 대해 약간의 확인을하고 있는데 맞지 않을 경우 EditText에 중점을두고 싶습니다.

나는 이것에 관해 몇 가지 질문을 이미 보았지만 나를 위해 일하지 못했다. (또는 내가 뭔가 잘못하고있다.)

requestFocus()를 트리거하는 다른 EditText를 터치하면 포커스는 현재 EditText에 유지되고 다른 포커스 아이콘은 포커스를 요청한 EditText에 표시됩니다.

제발 도와

여기 내 레이아웃 파일이다 :

<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> 

코드에 내가 그렇게 할 : 모든

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(); 
       } 

      } 
     } 
    }); 

답변

1

이 솔루션은 (: 포커스 = "true"를 \ 안드로이드 : focusableIn TouchMode를이 = "true"로 안드로이드 추가 할 필요가) 작동하지 않습니다 here

해결책을 발견

사용자 편집 EditText A -> 사용자 편집 EditText B 편집하려면 -> EditText A onFocusListener.onFocusChanged -> EditText A requestFocus -> EditText B는 여전히 포커스가 있고 텍스트를 입력하고 편집 텍스트에 씁니다. 포커스의 마커 만 EditText A에 나타납니다.

0

먼저 왜

를 제공 할

android:focusable="true" android:focusableInTouchMode="true"

레이아웃이 아닌 EditText 필드?

둘째 - dev.andro에서 requestFocus() 정의 : "특정보기로 또는 그 자손 중 하나에 포커스를하려고 이를 호출합니다."

결론은 내가 당신이 말한 것을 제대로 이해하지 못했기 때문에 결론이 될 것입니다. 이것은 작동하고 초점은 userEditText에 머무르고 있지만 다른 일부는 EditText에 초점을 맞춘보기 용 선택기가 있습니까?

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; 
      } 
     } 
    } 
}); 

이 문제를 명확히하려면 :

+0

그 그게 전부 때문에 어떤 나는 비슷한 질문에 대한 답을 보았다. 내가 그것을 제공하지 않으면 그것은 똑같이한다. 선택자가 의미하는 것이 이해가 가지 않지만 명확히하기 위해 내 질문을 편집하십시오. – piojo

0

This이 나에게 적합하며 덜 해킹 된 것처럼 보입니다.

실행 된 작업은 Runnable의 requestFocus()를 프로세스 메시지 대기열로 보냅니다. 위의 링크와 달리, 나는 다른 필드의 초점을 지울 필요가 없었으며 게시 지연 할 필요가 없었습니다.내 코드

 new Handler().post(new Runnable() { 

       @Override 
       public void run() { 
        ev1.requestFocus(); 
       } 
     }); 
4

처음 글고 치기에 대해이 작업 EditorInfo.IME_ACTION_NEXT에서 수신 한 다음이 호출 requestFocus()에 의해 두 번째로 포커스를 요청할 수 있습니다, 이것은 예입니다 : 내가 제공

firstEditText.setOnEditorActionListener(new OnEditorActionListener() { 
     @Override 
     public boolean onEditorAction(TextView v, int actionId, 
       KeyEvent event) { 

      if (actionId == EditorInfo.IME_ACTION_NEXT) { 
       secondEditText.requestFocus(); 
       return true; 
      } 
      return false; 
     } 
    }); 
+0

정확하게 필요한 것! 고마워 – Jey10

관련 문제