2011-02-07 23 views
8

Tengo un problema molesto con una pantalla. La pantalla consiste en un montón de Spinners uno debajo del otro, y luego debajo del spinner, un EditText.No puedo arreglármelas para solicitarFocus a Spinner

El problema es que cuando se inicia la pantalla, EditText tiene foco, lo que significa que algunos Spinners están fuera de la parte superior de la pantalla. Por más que lo intente, no puedo hacer que la parte superior de Spinner se enfoque, ya sea usando <requestFocus/> en la pantalla XML, o usando requestFocus() en el código. Intenté hacer lo que sugiere requestFocus skipping next EditText, y si sigo la sugerencia correctamente, tampoco funciona.

Para reproducir el problema, cree un nuevo proyecto de Android en Eclipse. main.xml es

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <Spinner 
     android:id="@+id/spinner" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <requestFocus /> 
    </Spinner> 
    <EditText 
     android:id="@+id/edittext" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" /> 
</LinearLayout> 

El código de actividad es

package nz.co.kb.testspinner; 

import android.app.Activity; 
import android.os.Bundle; 
import android.view.View; 

public class TestSpinner extends Activity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
//  setContentView(R.layout.main); 
     View view = getLayoutInflater().inflate(R.layout.main, null); 
     final View spinner = view.findViewById(R.id.spinner); 
     view.post(new Runnable() { 
      public void run() { 
       spinner.requestFocus(); 
      } 
     }); 
     setContentView(view); 
     spinner.requestFocus(); 
    } 
} 

Nota múltiples estilos de requestFocus intentaron.

¿Es esto un error de plataforma, o estoy haciendo algo mal?

Gracias.

Respuesta

5

De línea documentation:

Una visión en realidad no se toman el enfoque si no es enfocable (isFocusable() devuelve falso), o si es enfocable y no es enfocable en modo táctil (isFocusableInTouchMode ()) mientras el dispositivo está en modo táctil.

17

tuve un problema similar, lo resuelto por hacer dos cosas:

1) configurar el objeto giratorio en la parte superior (Dentro del método onCreate) sólo para asegurarse de que el código se ejecuta en primer lugar. 2) que utilizó la siguiente:

Spinner s1 = (Spinner) findViewById(R.id.spinner1); 
     s1.setFocusable(true); 
     s1.setFocusableInTouchMode(true); 

Déjame saber si esto ayuda o si necesita más ayuda.

+4

Esta es la respuesta correcta. Aunque no puedo hacer que funcione en el xml. android: focusable = "true" android: focusableInTouchMode = "true" – MinceMan

+0

Funcionó después de agregar 's1..requestFocus();' –

Cuestiones relacionadas