Portanto, tenho um problema fascinante. Apesar de não estar rolando manual ou programaticamente minha visualização, meu WebView está sendo rolado automaticamente após o carregamento dos dados dentro dele.
Eu tenho um fragmento em um viewpager. Quando carrego o pager pela primeira vez, ele funciona conforme o esperado e tudo é mostrado. Mas quando eu "viro a página", os dados são carregados e o WebView aparece no topo da página, ocultando as visualizações acima dele, o que é indesejável.
Alguém sabe como evitar que isso aconteça?
Meu layout é assim:
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@color/background" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/article_title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="2dp"
android:text="Some Title"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/article_title"
android:textStyle="bold" />
<LinearLayout
android:id="@+id/LL_Seperator"
android:layout_width="fill_parent"
android:layout_height="1dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginTop="5dp"
android:layout_marginBottom="5dp"
android:background="@color/text"
android:orientation="horizontal" >
</LinearLayout>
<WebView
android:id="@+id/article_content"
android:layout_width="match_parent"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/article_link"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="5dp"
android:layout_marginTop="5dp"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp"
android:text="View Full Article"
android:textColor="@color/article_title"
android:textStyle="bold" />
</LinearLayout>
</ScrollView>
Também não estou dando foco a nada. Por padrão, parece rolar automaticamente para o WebView após ser carregado. Como faço para evitar isso?
Respostas:
Você pode simplesmente adicionar isso ao seu LinearLayout: android: focusableInTouchMode = "true". Funciona para mim.
fonte
Eu tive o mesmo problema, depois de horas tentando várias idéias, o que finalmente funcionou para mim foi simplesmente adicionar o
descendantFocusability
atributo ao ScrollView contendo LinearLayout, com o valorblocksDescendants
. No seu caso:O problema não voltou a ocorrer desde então.
fonte
RecyclerView
também. Sua solução também funciona nesse caso :)Você deve criar uma nova classe extend ScrollView e então Override requestChildFocus:
Em seguida, em seu layout xml, usando:
Isso funciona para mim. O ScrollView não irá mais rolar automaticamente para o WebView.
fonte
public ExtendedScrollView(Context context) { super(context); } public ExtendedScrollView( Context context, AttributeSet attributeSet) { super(context, attributeSet); } public ExtendedScrollView( Context context, AttributeSet attributeSet, int defStyle) { super(context, attributeSet, defStyle); }
Adicionar essas linhas no layout principal resolve o problema
fonte
Como isso:
fonte
Provavelmente existem pessoas que têm o mesmo problema que eu estava tendo, então vou ajudar.
Eu estava tentando colocar android: descendantFocusability = "beforeDescendants" em meu ScrollView principal da seguinte maneira:
e não estava funcionando, então tive que fazer um RelativeLayout o pai do ScrollView e colocar o android: descendantFocusability = "beforeDescendants" no pai também.
Então, resolvi fazendo o seguinte:
fonte
Tive de usar o nome totalmente qualificado para MyScrollView, caso contrário, obtive uma exceção inflada.
fonte