Не удается запросить Фокус спиннер - PullRequest
10 голосов
/ 07 февраля 2011

У меня раздражающая проблема с экраном. Экран состоит из набора прядильщиков, расположенных один под другим, а затем под прядильщиком EditText.

Проблема заключается в том, что при запуске экрана EditText имеет фокус, что означает, что некоторые Spinners находятся вне верхней части экрана. Как ни старайся, я не могу сфокусировать стартовый Spinner, используя <requestFocus/> в XML-коде на экране или requestFocus() в коде. Я попытался сделать то, что предлагает requestFocus, пропуская следующий EditText , и если я правильно следую предложению, он тоже не сработает.

Чтобы воспроизвести проблему, создайте новый проект Android в Eclipse. main.xml - это

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

Код активности

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

Обратите внимание на несколько стилей requestFocus.

Это ошибка платформы или я что-то не так делаю?

Спасибо.

Ответы [ 3 ]

19 голосов
/ 04 мая 2011

У меня была похожая проблема, я решил, выполнив две вещи:

1) Я установил объект Spinner сверху (в методе onCreate), чтобы убедиться, что мой код выполняется первым.2) Я использовал следующее:

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

Дайте мне знать, если это поможет, или вам нужна дополнительная помощь.

7 голосов
/ 29 сентября 2011

Из онлайн документации :

Вид фактически не будет фокусироваться, если он не фокусируемый (isFocusable () возвращает false) или если он фокусируемый, и онне фокусируется в сенсорном режиме (isFocusableInTouchMode ()), когда устройство находится в сенсорном режиме.

1 голос
/ 05 сентября 2018

В моем случае это сработало.

Spinner s1 = (Spinner) findViewById(R.id.spinner1);
s1.requestFocusFromTouch();
s1.performClick();
...