Je vais ajouter tirer pour actualiser ma vue Web afin de rafraîchir ma vue Web. J'ai vu toutes les questions sur cette page mais je ne trouve pas le bon moyen d'ajouter des éléments à rafraîchir ...
Mainactivity.Java
package com.vvhvb.hesselfeenstra.vvheerenveenseboys;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String url ="http://heerenveenseboys.nl/";
WebView view=(WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setBuiltInZoomControls(true);
view.getSettings().setDisplayZoomControls(false);
view.setWebViewClient(new WebViewClient());
view.loadUrl(url);
}
}
content_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.vvhvb.hesselfeenstra.vvheerenveenseboys.MainActivity"
tools:showIn="@layout/activity_main">
<WebView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:id="@+id/webView"
Android:layout_alignParentBottom="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentEnd="true"
Android:layout_alignParentTop="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true" />
</RelativeLayout>
J'espère que tout le monde pourra m'aider et résoudre ce problème pour moi.
Vous pouvez envelopper la vue Web dans la disposition d'actualisation de glisser comme ceci
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.vvhvb.hesselfeenstra.vvheerenveenseboys.MainActivity"
tools:showIn="@layout/activity_main">
<Android.support.v4.widget.SwipeRefreshLayout
Android:id="@+id/swipeContainer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<Android.support.v4.widget.NestedScrollView
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<WebView
Android:id="@+id/webView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentEnd="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentStart="true"
Android:layout_alignParentTop="true" />
</Android.support.v4.widget.NestedScrollView>
</Android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
En java
package com.vvhvb.hesselfeenstra.vvheerenveenseboys;
import Android.os.Bundle;
import Android.support.v7.app.AppCompatActivity;
import Android.webkit.WebView;
import Android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
WebView view;
SwipeRefreshLayout mySwipeRefreshLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
String url ="http://heerenveenseboys.nl/";
view=(WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setBuiltInZoomControls(true);
view.getSettings().setDisplayZoomControls(false);
view.setWebViewClient(new WebViewClient());
view.loadUrl(url);
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
view.reload();
}
}
);
}
}
Je pense que la meilleure solution consiste à utiliser SwipeRefreshLayout
mais sans NestedScrollView
à l'intérieur comme jitinsharma décrit, parce que ce problème possible: la hauteur de la vue Web augmente indéfiniment dans un nestedScrollView . Mais il existe une autre solution pour le problème de défilement décrit par vizZ , pour implémenter ViewTreeObserver.OnScrollChangedListener
.Ainsi, une solution de travail devrait ressembler à ceci:
<Android.support.v4.widget.SwipeRefreshLayout
Android:id="@+id/swipeContainer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<RelativeLayout
Android:id="@+id/nonVideoLayout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:windowSoftInputMode="adjustResize">
<WebView
Android:id="@+id/main_web_view"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_marginTop="5dp"
Android:windowSoftInputMode="adjustResize"
app:layout_constraintDimensionRatio="1" />
</RelativeLayout>
</Android.support.v4.widget.SwipeRefreshLayout>
Paramètres d'activité:
private WebView mWebView;
private SwipeRefreshLayout mySwipeRefreshLayout;
private ViewTreeObserver.OnScrollChangedListener mOnScrollChangedListener;
sur l'activité onCreate
:
mWebView = (WebView) findViewById(R.id.main_web_view);
mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mWebView.reload();
}
}
);
et outillage d'activité: implements AdvancedWebView.Listener
sur l'activité onStop
:
mySwipeRefreshLayout.getViewTreeObserver().removeOnScrollChangedListener(mOnScrollChangedListener);
et Activité onStart
:
mySwipeRefreshLayout.getViewTreeObserver().addOnScrollChangedListener(mOnScrollChangedListener =
new ViewTreeObserver.OnScrollChangedListener() {
@Override
public void onScrollChanged() {
if (mWebView.getScrollY() == 0)
mySwipeRefreshLayout.setEnabled(true);
else
mySwipeRefreshLayout.setEnabled(false);
}
});
https://developer.Android.com/training/swipe/add-swipe-interface.html
Vous pouvez utiliser la disposition Balayer pour actualiser, elle est facile à utiliser et s’occupe de l’animation d’actualisation à votre place.
Vous pouvez ajouter un OnRefreshListener pour actualiser votre vue Web.
Essayez ceci si vous voulez simplement tirer pour rafraîchir
ll = (LinearLayout)findViewById(R.id.CategorySelect_lLayout_noID);
ll.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN){
Toast.makeText(CategorySelect.this, "action DOWN called", Toast.LENGTH_SHORT).show();
return true;
}
return false;
}
});
return true;
}
Ou si vous voulez une icône ou quelque chose comme chrome
Cela devrait fonctionner parfaitement! Dans votre fichier de présentation, placez la vue Web dans un SwipeRefreshLayout.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:id="@+id/activity_main"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<Android.support.v4.widget.SwipeRefreshLayout
Android:id="@+id/swipeContainer"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<WebView
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_alignParentTop="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentStart="true"
Android:id="@+id/webView"
/>
</Android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
Dans votre fichier Java, déclarez SwipeRefreshLayout mySwipeRefreshLayout;
en dehors de la classe . Ajoutez ensuite ceci à la méthode onCreate()
mySwipeRefreshLayout = (SwipeRefreshLayout)this.findViewById(R.id.swipeContainer);
mySwipeRefreshLayout.setOnRefreshListener(
new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
mWebview.reload();
mWebview.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);
// This is important as it forces webview to load from the instead of reloading from cache
mWebview .loadUrl(getString(R.string.app_link));
}
}
);