Подтвердить что ты не робот

Выпадающее меню Android-браузера не работает на устройствах Android 4.x

У меня проблема с одним из моих WebView на устройствах Android 4.x.

Android-приложение имеет Tabhost, содержащий Фрагменты. Один из фрагментов содержит веб-представление. На отображаемой странице выпадающее меню выглядит следующим образом:

<select id="mySelect" name="mySelect">
    <option value="1">Testname 1</option>
    <option value="2">Testname 2</option>
    <option value="3">Testname 3</option>
</select>

Теперь, когда я открываю свое приложение с помощью Galaxy S3 с Android 4.1.1 (или любым другим устройством Android, на котором я мог бы набрать руки), я могу выбрать "Testname 1", затем "Testname 2" и т.д.

В Galaxy Nexus (подтвержденный на разных устройствах под управлением Android 4.1.1, 4.1.2 и 4.2), когда я пытаюсь выбрать что-то, что пользовательский интерфейс просто блокирует. После того, как я переключусь на другую вкладку и обратно на вкладку веб-просмотра, пользовательский интерфейс, наконец, изменится на ранее выбранный элемент.

Любая идея, что вызывает это и как я могу исправить это для Galaxy Nexus?

Важное обновление: Я мог отслеживать это до Tabhost. Когда WebView находится в Tabhost, он не работает, когда он не работает. Это может быть связано с этой проблемой.

4b9b3361

Ответ 1

На самом деле вы можете сделать больше с ActionBar, чем с помощью TabHost. Включая вкладки. позволит вам реализовать ActionBar в более старых версиях minSdk = 4. Большинство разработчиков User Experience, с которыми я работал, считают, что вкладки являются добрыми из-за того, что они предоставляют знакомый пользовательский интерфейс пользователям, но кто я, чтобы дуть против ветра? ActionBar обеспечивает особый внешний вид Android и чистоту интерфейса пользователя. ссылка - это документация по рекомендованным Google шаблонам пользовательского интерфейса с этой конференции. ссылка - это видео YouTube, в котором обсуждаются шаблоны пользовательского интерфейса на конференции. Следуя этим рекомендациям, вы можете получить лучший обзор своего приложения и более сложный интерфейс. Я не уверен, что ваши потребности, но если вы собираетесь что-то сделать, может ли это сделать правильно? Если вам нужна дополнительная помощь, пожалуйста, дайте мне знать. Я могу привести примеры использования ActionBar. ссылка ActionBar может дать вам несколько лучших причин, по которым я могу понять, почему это хороший выбор для пользовательского интерфейса.

Правильно ли вы реализуете свои фрагменты? ссылка - это документация по их использованию. Если вы используете динамические фрагменты вместо фиксированных фрагментов, реализованных в макете, один трюк, который я нашел при написании приложений, - это вызвать .clearBackStack(); когда у меня возникают смешные проблемы, и, похоже, проблема решена.

Ответ 2

TabHost в ICS? Вы используете пакет совместимости? Правильный дизайн будет заключаться в том, чтобы использовать ActionBar для реализации вкладок, если вы работаете в основном в формате 3.1+.

Ответ 3

Попробуйте использовать этот пользовательский класс в своем XML-макете вместо обычного TabHost:

package com.example.test;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TabHost;

public class TabHostFix extends TabHost
{
    public TabHostFix(Context context)
    {
        super(context);
    }

    public TabHostFix(Context context, AttributeSet attrs)
    {
        super(context, attrs);
    }

    @Override
    public void onTouchModeChanged(boolean isInTouchMode)
    {
        //do not call through to base class, do nothing
        //this is a fix for tabhost stealing focus from textboxes
    }
}

Ссылка на пользовательский класс в вашем XML-макете, например:

<?xml version="1.0" encoding="utf-8"?>
<com.example.test.TabHostFix xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/tabhost"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <TabWidget
            android:id="@android:id/tabs"
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_weight="0"/>
        <FrameLayout
            android:id="@android:id/tabcontent"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:layout_weight="0" />
        <FrameLayout
            android:id="@+android:id/realtabcontent"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />
    </LinearLayout>
</com.example.test.TabHostFix>

EDIT: В качестве альтернативного решения вы можете полностью заменить TabHost, используя ViewPager из библиотеки поддержки и пользовательский индикатор Pager, который имитирует вкладки. Я никогда не пробовал это раньше, но я прочитал, что есть хорошие бесплатные индикаторы пейджера для сторонних разработчиков здесь.

Ответ 4

После выбора выбора данные элемента списка могут измениться, но мы не можем увидеть изменение. для этого нам нужно явно обновить выбранный компонент. Надеюсь, это может решить проблему.

$("select#HeightUnit option[value='cm']").attr("selected", "selected"); $('select').selectmenu('refresh');

Ответ 5

> i think u must add the API version on your activity cause some UI cannot compatible on >android API 8. so check the API SDK like this.

>@TargetApi(Build.VERSION_CODES.GINGERBREAD)
>if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD)
>{
>// condisition
>}