Выпадающее меню 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
, он не работает, когда он не работает. Это может быть связано с этой проблемой.
Ответы
Ответ 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
>}