Android ViewPager показывает программную клавиатуру не в том месте - PullRequest
5 голосов
/ 03 февраля 2012

Я использую ViewPager с 3 фрагментами. На первом есть только текст. Второе, поле ввода. третий, только текст.

Когда инициализируется ViewPager, отображается программная клавиатура, поскольку в поле ввода установлен фокус. Если я изменяю порядок фрагмента, программная клавиатура не отображается.

Как управлять программной клавиатурой focus et soft с помощью ViewPager?

Привет

Ответы [ 3 ]

6 голосов
/ 14 сентября 2012

Лучшее решение, которое я нашел на данный момент, - это использовать android:windowSoftInputMode="stateHidden" в манифесте вашей активности, а затем добавить это к вашей деятельности.

@Override
public void onPageScrollStateChanged(int state)
{
    if (state == ViewPager.SCROLL_STATE_IDLE)
    {
        if (mViewPager.getCurrentItem() == 0)
        {
            // Hide the keyboard.
            ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);
        }
    }
}

Я не использовал onPageSelected(), потому чтоСпрятать клавиатуру с помощью анимационных винтов со смахиванием анимации.И я не использовал трюк android:focusable, потому что клавиатура не скрыта, когда вы проводите назад к фрагменту без ввода.Хотя я полагаю, вы могли бы объединить это с приведенным выше кодом.

1 голос
/ 17 февраля 2012

Я уверен, что есть лучший способ сделать это, но у меня возникла та же проблема, и я обошел ее, установив родительский элемент View на фокусируемый.Таким образом, все, что вызывает всплывающую программную клавиатуру, не будет фокусироваться, когда вы проводите между страницами ...

<!-- Dummy item to prevent your View from receiving focus -->
<LinearLayout
    ...
    android:focusable="true" 
    android:focusableInTouchMode="true" />

    <!-- The view(s) that are causing the keyboard to pop up each time you swipe -->
    <EditText ... />

</LinearLayout>
0 голосов
/ 10 июля 2014

Спасибо всем, Тимммм очень помог.Я, наконец, все обернул и получил полное решение для скрытого нажатия клавиш.У меня есть 4 вкладки с editTexts на каждой, и мне нужно скрыть клавиатуру при проведении пальцем.Я добавил это к фрагменту макета:

<!--Fixes keboard pop-up-->
<LinearLayout
    android:layout_width="0dp"
    android:layout_height="0dp"
    android:background="@android:color/transparent"
    android:focusable="true"
    android:focusableInTouchMode="true">
</LinearLayout>

которые были добавлены в код активности (обратите внимание на небольшую разницу с ответом Timmmm: у меня нет

mViewPager.getCurrentItem() == 0

здесь, потому что янеобходимо скрыть клавиатуру для каждого представления:

// When swiping between different sections, select the corresponding
    // tab. We can also use ActionBar.Tab#select() to do this if we have
    // a reference to the Tab.
    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            if (actionBar != null) {
                actionBar.setSelectedNavigationItem(position);
            }
        }
        @Override
        public void onPageScrollStateChanged(int state)
        {
            if (state == ViewPager.SCROLL_STATE_IDLE)
            {
                // Hide the keyboard.
                ((InputMethodManager)getSystemService(INPUT_METHOD_SERVICE))
                        .hideSoftInputFromWindow(mViewPager.getWindowToken(), 0);

            }
        }
    });

А вот и действие в AndroidManifest.xml:

<activity
        android:name=".TestActivity"
        android:label="@string/title_activity_test"
        android:parentActivityName=".MainActivity"
        android:windowSoftInputMode="stateHidden">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="com.atrinax.test.MainActivity" />
</activity>
...