Edición de Edición personalizada de Android y NextFocusDown

En mi actividad de registro hay algunas vistas personalizadas de EditText definidas en un LinearLayout vertical. De arriba hacia abajo.

Debido a que necesito alguna funcionalidad adicional para cada EditText, he creado una clase EditText personalizada que proporciona esa funcionalidad adicional. Esa clase se basa en algunos atributos personalizados que se agregaron en attrs.xml y se recuperan en la clase y luego se establecen en el editado EditText.

Todo funciona bien excepto por una cosa que no puedo resolver. Parece que no puedo obtener NextFocusDown para trabajar en mis vistas personalizadas de EditText. Cuando se utiliza vistas estándar de EditText, funciona bien. Cuando cambie a mi EditText personalizado, lo ignora. Todos los demás atributos funcionan normalmente excepto éste.

¿Qué me estoy perdiendo? ¿Alguien ha logrado utilizar ese atributo en una vista de texto de edición personalizada?

¡Gracias!

EDITAR:

Esto es parte de la clase EditText personalizada:

public class CustomEditText extends RelativeLayout { private LayoutInflater mInflater = null; private EditText mEditText; private TextView mHintQuestionMark; private TextView mHintText; private Button mButtonClear; private boolean isExpandView = false; private boolean clearButtonEnabled = false; private boolean hintEnabled = false; public CustomEditText(Context context) { super(context); initViews(); } public CustomEditText(Context context, AttributeSet attrs) { super(context, attrs); initViews(); getCustomAttributes(context, attrs); } public CustomEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); initViews(); getCustomAttributes(context, attrs); } private void initViews() { mInflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); mInflater.inflate(R.layout.custom_edit_text, this, true); mHintText = (TextView) findViewById(R.id.theHint); mEditText = (EditText) findViewById(R.id.theEditText); mEditText.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { if (clearButtonEnabled){ if (charSequence.length() > 0){ mButtonClear.setVisibility(VISIBLE); } else { mButtonClear.setVisibility(INVISIBLE); } } } @Override public void afterTextChanged(Editable editable) { } }); mHintQuestionMark = (TextView) findViewById(R.id.hintQuestionMark); mHintQuestionMark.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (isExpandView) { collapseHeight(mHintText); } else { // Expand the HINT view downwards expandHeight(mHintText); } } }); mButtonClear = (Button) findViewById(R.id.buttonClear); mButtonClear.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mEditText.setText(""); } }); } private void getCustomAttributes(Context ctx, AttributeSet attrs){ TypedArray typedArray = ctx.getTheme().obtainStyledAttributes(attrs, R.styleable.edittext_attrs, 0, 0); int firstNameId = 0; int lastNameId = 0; try{ mEditText.setInputType(typedArray.getInt(R.styleable.edittext_attrs_android_inputType, EditorInfo.TYPE_TEXT_VARIATION_NORMAL)); mEditText.setHint(typedArray.getString(R.styleable.edittext_attrs_android_hint)); mEditText.setNextFocusDownId(typedArray.getInt(R.styleable.edittext_attrs_android_nextFocusDown, -1)); clearButtonEnabled = typedArray.getBoolean(R.styleable.edittext_attrs_add_clear_button, false); hintEnabled = typedArray.getBoolean(R.styleable.edittext_attrs_add_hint_icon, false); } finally { typedArray.recycle(); } if (hintEnabled){ mHintQuestionMark.setVisibility(VISIBLE); } else { mHintQuestionMark.setVisibility(GONE); } } 

Esta es la costumbre editar texto xml Estoy inflando en esa clase:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <LinearLayout android:id="@+id/editTextGroup" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <RelativeLayout android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"> <EditText android:id="@+id/theEditText" android:layout_width="match_parent" android:layout_height="52dp" android:layout_weight="1" android:background="@drawable/edit_text_rectangle" android:maxLength="53" android:padding="12dp" android:visibility="visible" /> <Button android:id="@+id/buttonClear" android:layout_width="30dp" android:layout_height="30dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:background="@drawable/remove_text_x" android:layout_marginLeft="5dp" android:visibility="gone" /> </RelativeLayout> <TextView android:id="@+id/hintQuestionMark" android:layout_width="36dp" android:layout_height="52dp" android:text="\?" android:textColor="#eeeeee" android:textSize="30sp" android:gravity="center" android:layout_gravity="right" android:background="#288abf" android:visibility="gone" /> </LinearLayout> <TextView android:id="@+id/theHint" android:layout_width="match_parent" android:layout_height="120dp" android:padding="8dp" android:text="@string/txtEmailHintText" android:textColor="#eeeeee" android:textSize="15sp" android:gravity="left" android:background="#288abf" android:layout_alignLeft="@+id/editTextGroup" android:layout_below="@+id/editTextGroup" android:visibility="gone" /> </RelativeLayout> 

Este es el archivo attrs.xml que utilizo para obtener los valores en la clase edittext personalizada:

 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="edittext_attrs"> <attr name="android:inputType" /> <attr name="android:hint" /> <attr name="android:nextFocusDown" /> <attr name="add_clear_button" format="boolean" /> <attr name="add_hint_icon" format="boolean" /> </declare-styleable> </resources> 

Y esta es una pequeña parte de la xml diseño que utilizo para la actividad de registro con sus dos vistas que deben utilizar el NextFocusDown:

  <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="16dp"> <com.name.view.customViews.CustomEditText android:id="@+id/registerTxtFirstName" android:layout_width="133dp" android:layout_height="52dp" android:nextFocusDown="@+id/registerTxtLastName" android:layout_alignParentLeft="true" android:inputType="textPersonName" custom:add_clear_button="true" android:hint="@string/first" android:visibility="visible" /> <com.name.view.customViews.CustomEditText android:id="@+id/registerTxtLastName" android:layout_width="133dp" android:layout_height="52dp" android:layout_alignParentRight="true" custom:add_clear_button="true" android:hint="@string/last" android:inputType="textPersonName" android:visibility="visible" /> </RelativeLayout> 

Espero que haya suficiente información aquí para ver cuál es el problema.

¡Gracias!

Old post, pero estoy presentando esta respuesta en caso de que alguien más se encuentra con el mismo problema.

En mi caso, encontré usando setOnClickListener() en el CustomEditText en cuestión hace que el android:nextFocusDown="" propiedad xml no funcione correctamente.

Por ejemplo:

Myxml.xml

 <com.view.MyCustomEditText android:id="@+id/username" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:hint="@string/email_username" android:inputType="textEmailAddress" android:nextFocusDown="@+id/password"/> <EditText android:id="@+id/password" android:layout_width="wrap_content" android:layout_height="wrap_content" android:hint="@string/password_hint" android:inputType="textPassword" android:imeOptions="actionDone"/> 

MainActivity.java:

 mUserEditText = (EditText) findViewById(R.id.username); mPasswordEditText = (EditText) findViewById(R.id.password); // Instead of using this mEditText.setOnClickListener(this) // Use mEditText.setOnTouchListener(this) 
  • ¿Existe un estándar de documentación para atributos personalizados de estilo XML en Android?
  • Android ¿Es posible definir un mapa en un archivo XML?
  • Cómo eliminar los espacios en blanco entre etiquetas en XML
  • Android Studio - Barra de acción quitar
  • Error cómico en la declaración de forma xml de Android
  • manipular XML Layout mediante programación en Android
  • Múltiples anotaciones encontradas en esta línea:
  • Android support-v7 CardView: La vista de texto de encabezado con otro color de fondo no se extiende hasta que los bordes
  • No se puede resolver el símbolo 'R' en Android Studio: "la fusión manifiesta falló con varios errores, vea los registros"
  • Prioridad de truncamiento de Android TextView o Resistencia de compresión
  • Eclipse falta las fichas de diseño gráfico y de origen al editar archivos XML de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.