2011-02-07 13 views
8

Mam denerwujący problem z ekranem. Ekran składa się z pęczków Spinnerów jeden pod drugim, a następnie pod przędzarką EditText.Nie można zarządzać zażądaniem Ustawić pokrętła

Problem polega na tym, że gdy zaczyna się ekran, EditText ma ostrość, co oznacza, że ​​niektóre Spinnery znajdują się u góry ekranu. Spróbuj, jak mogę, nie mogę sprawić, aby najlepszy Spinner zaczął skupiać się, używając <requestFocus/> w ekranie XML lub używając kodu requestFocus(). Podjęłam próbę zrobienia tego, co sugeruje requestFocus skipping next EditText, a jeśli podążam za sugestią poprawnie, to też nie działa.

Aby odtworzyć problem, utwórz nowy projekt Android w środowisku Eclipse. main.xml jest

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

Kod działalność

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

Note wielu stylów requestFocus próbę.

Czy to błąd platformy, czy też robię coś nie tak?

Dzięki.

Odpowiedz

5

Od Internecie documentation:

Widok nie będzie rzeczywiście wziąć ostrość, jeśli nie jest aktywowana (isFocusable() zwraca false), lub jeśli jest aktywowana i nie jest aktywowana w trybie dotykowym (isFocusableInTouchMode ()), gdy urządzenie jest w trybie dotykowym.

17

Miałem podobny problem, rozwiązać, wykonując dwie rzeczy:

1) ustawić obiekt Spinner na górze (w metodzie onCreate) by upewnić się, że mój kod zostanie wykonany pierwszy. 2) użyłem następujące:

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

Daj mi znać, jeśli to nie pomaga lub potrzebujesz dalszej pomocy.

+4

To jest właściwa odpowiedź. Chociaż nie mogę go uruchomić w xml. android: focusable = "true" android: focusableInTouchMode = "true" – MinceMan

+0

To działało po dodaniu 's1..requestFocus(); –

Powiązane problemy