vibracion teclado swiftkey quitar para p20 letras grandes grande descargar dedos como celular android android-layout android-widget android-edittext android-softkeyboard

android - swiftkey - Deshabilitar el teclado virtual en NumberPicker



teclado letras grandes (8)

Intento desactivar el teclado virtual cuando uso un NumberPicker para ingresar valores numéricos (por razones estéticas). Este es mi layout-xml-code:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <LinearLayout android:id="@+id/linearLayout2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:layout_marginBottom="30dp" android:layout_marginTop="30dp" > <NumberPicker android:id="@+id/repetitionPicker" android:layout_width="40dp" android:layout_height="wrap_content" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="@string/repetitions_short_divider" android:textAppearance="?android:attr/textAppearanceMedium" /> <NumberPicker android:id="@+id/weightPicker" android:layout_width="40dp" android:layout_height="wrap_content" android:layout_marginLeft="40dp" /> <TextView android:id="@+id/textView2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_vertical" android:text="@string/pounds" android:textAppearance="?android:attr/textAppearanceMedium" /> </LinearLayout> <Button android:id="@+id/saveButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:text="@string/save" /> </LinearLayout>

Y finalmente este es el código donde trato de bloquear el teclado en el método onCreate ():

// hide keyboard View.OnClickListener disableKeyBoardListener = new View.OnClickListener() { public void onClick(View v) { ((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)) .hideSoftInputFromWindow(v.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } }; ((EditText) weightPicker.getChildAt(1)).setInputType(InputType.TYPE_NULL); ((EditText) repetitionPicker.getChildAt(1)).setInputType(InputType.TYPE_NULL); ((EditText) weightPicker.getChildAt(1)).setOnClickListener(disableKeyBoardListener); //((EditText) repetitionPicker.getChildAt(1)).setOnClickListener(disableKeyBoardListener); //weightPicker.setOnClickListener(disableKeyBoardListener); //repetitionPicker.setOnClickListener(disableKeyBoardListener); getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

Lamentablemente, el teclado suave aún aparece cuando se hace clic en un NumberPicker. ¿Algunas ideas?


Acabo de encontrar esto y funciona como un encanto:

myNumberPicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS);

También puedes configurar esto en XML:

android:descendantFocusability="blocksDescendants"


Acabo de mejorar los ans de @MaxVogler (por lo tanto, si quieres votar este voto @MaxVogler también) y hacerlo un hack robusto. Además, no necesitamos llamar a setOnFocusChangeListener y setInputType . Solo setFocusable a falso servirá.

A continuación hay una aplicación auxiliar para habilitar / deshabilitar la función

public static void enableNumberPickerManualEditing(NumberPicker numPicker, boolean enable) { int childCount = numPicker.getChildCount(); for (int i = 0; i < childCount; i++) { View childView = numPicker.getChildAt(i); if (childView instanceof EditText) { EditText et = (EditText) childView; et.setFocusable(enable); return; } } }


Aquí hay otra forma de hacerlo que le permite al usuario editar un número si lo desea, simplemente suprime el teclado virtual al principio. Use NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS) para suprimir el teclado NumberPicker.setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS) cuando la interfaz aparece por primera vez según las respuestas anteriores. A continuación, obtenga su diálogo o actividad para implementar View.OnTouchListener , llame a setOnTouchListener(this) en su NumberPicker , y en su implementación de onTouch(View v,MotionEvent e) restablezca la capacidad de enfoque del descendiente del selector numérico a su valor normal, luego devuelva false.

Devolver el valor falso significa que el número aún procesa el toque mediante NumberPicker, lo que significa que si el usuario toca el cuadro de edición, aparecerá el teclado virtual. Esto pasa a ser exactamente lo que quería enfrentar el mismo problema: hacer que el teclado suave aparezca con el cuadro de diálogo cuando muestra por primera vez no es agradable ya que cambia el cuadro de diálogo después de que aparece.

public class GetBufferDialog extends DialogFragment implements View.OnTouchListener {

después de crear el diálogo en el método onCreateDialog() y encontrar el NumberPicker:

m_oldFocus = m_numberpicker.getDescendantFocusability(); m_numberpicker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); m_numberpicker.setOnTouchListener(this);

y aquí está el método OnTouch:

public boolean onTouch(View v, MotionEvent event) { m_numberpicker.setDescendantFocusability(m_oldFocus); return false; }


Después de leer el código fuente de com / android / internal / widget / NumberPicker.java, llegué a la siguiente solución:

// Hide soft keyboard on NumberPickers by overwriting the OnFocusChangeListener OnFocusChangeListener fcl = new OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { // Do nothing to suppress keyboard } }; ((EditText) numberPicker.getChildAt(1)).setOnFocusChangeListener(fcl); // Suppress soft keyboard from the beginning ((EditText) numberPicker.getChildAt(1)).setInputType(InputType.TYPE_NULL);


Lo más simple que encontré para trabajar fue:

numberPicker = (NumberPicker) myDialogView.findViewById(R.id.myViewId); EditText numberPickerChild = (EditText) numberPicker.getChildAt(0); numberPickerChild.setFocusable(false); numberPickerChild.setInputType(InputType.TYPE_NULL);


No sé por qué funciona, pero al configurar OnClickListener que no impide que el teclado se muestre (Lollipop)

numberPicker.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } });


Versión Xml de la respuesta de Andrew Webber

android:descendantFocusability="blocksDescendants"

Ejemplo

<NumberPicker android:id="@+id/your_numberpicker" android:layout_width="wrap_content" android:layout_height="wrap_content" android:descendantFocusability="blocksDescendants"/>


/** * set focus to top level window * disposes descendant focus * disposes softInput * @param context - activity context * @param enable - state of focus * */ public static void topLevelFocus(Context context, boolean enable){ if(Activity.class.isAssignableFrom(context.getClass())){ ViewGroup tlView = (ViewGroup) ((Activity) context).getWindow().getDecorView(); if(tlView!=null){ tlView.setFocusable(enable); tlView.setFocusableInTouchMode(enable); tlView.setDescendantFocusability(ViewGroup.FOCUS_BEFORE_DESCENDANTS); tlView.requestFocus(); } } }

* llamando esto:

  • no bloqueará la capacidad de enfoque de los descendientes (el número se podrá editar)

  • ocultará entrada suave en crear

  • antes (entrada de procesamiento) getValue () permitirá obtener walue adecuado