我的应用程序中有 WebView
Fragment
,我想查看,用户滚动 WebView
或不是,例如,如果用户向下滚动我的 WebView
,我想要显示一条Toast
消息" 您滚动了向下"我在过去的3天里尝试过这个,但我没有得到任何正确的解决方案。我见过很多教程和讨论,其中没有一个对我有用。有没有人可以提供帮助?
这是我的片段java代码
public class tab1 extends Fragment {
public ProgressBar bar;
public FrameLayout frameLayout;
public tab1()
{
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tab1, null);
final SwipeRefreshLayout swipe =(SwipeRefreshLayout)rootView.findViewById(R.id.swiperefresh1);
frameLayout=(FrameLayout) rootView.findViewById(R.id.frame1);
bar=(ProgressBar)rootView.findViewById(R.id.progressBar1);
final WebView view=(WebView) rootView.findViewById(R.id.webview);
bar.setMax(100);
view.loadUrl("http://facebook.com");
view.getSettings().setJavaScriptEnabled(true);
view.setWebViewClient(new MyWebViewClient());
view.setWebChromeClient(new WebChromeClient(){
public void onProgressChanged(WebView view1,int progress){
frameLayout.setVisibility(View.VISIBLE);
bar.setProgress(progress);
if (progress==100){
frameLayout.setVisibility(View.GONE);
swipe.setRefreshing(false);
}
super.onProgressChanged(view1,progress);
}
});
view.getSettings().setBuiltInZoomControls(true);
view.getSettings().setDisplayZoomControls(false);
bar.setProgress(0);
swipe.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
swipe.setColorSchemeResources(
R.color.pink, R.color.indigo, R.color.lime);
String webUrl = view.getUrl();
view.loadUrl(webUrl);
}
});
return rootView;
}
}
这是我的xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context="com.hackerinside.jaisonjoseph.polysocial.tab1">
<FrameLayout
android:id="@+id/frame1"
android:layout_width="match_parent"
android:layout_height="3dp"
android:background="@android:color/transparent">
<ProgressBar
android:id="@+id/progressBar1"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="fill_parent"
android:layout_height="3dp"
android:background="@android:color/transparent"
android:foregroundGravity="top"
android:progressDrawable="@drawable/custom_progress"
android:progress="20"/>
</FrameLayout>
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/swiperefresh1"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/webview"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</WebView>
</android.support.v4.widget.SwipeRefreshLayout>
添加答案后的错误消息
Cast from null to OnScrollChangeListener requires API level 23 (current min is 15) less... (Ctrl+F1)
此检查会扫描应用程序中的所有Android
API
次调用,并警告此应用程序所定位的所有版本上未提供的任何调用(根据其最小SDK
属性在清单中)。如果您确实想要使用此API
并且不需要支持较旧的设备,只需在minSdkVersion
或build.gradle
文件中设置AndroidManifest.xml
即可。如果您的代码故意访问较新的APIs
,并且您已确保(例如,通过条件执行)此代码将仅在受支持的平台上调用,那么您可以使用{{1}注释您的类或方法}注释指定要应用的本地最小@TargetApi
,例如SDK
,以便此检查考虑11而不是您的清单文件的最小@TargetApi(11)
作为必需SDK
水平。如果您故意在样式定义中设置android:属性,请确保将其放在API
文件夹中,以避免在制造商添加了自定义属性的某些设备上遇到运行时冲突,这些属性的ID与新的属性冲突以后的平台。同样,您可以在values-vNN
文件中使用tools:targetApi="11"
来表示该元素只会在适当的上下文中膨胀
答案 0 :(得分:1)
好吧试试这个
view.setOnScrollChangeListener(new View.OnScrollChangeListener() {
@Override
public void onScrollChange(View v, int scrollX, int scrollY, int
oldScrollX, int oldScrollY) {
}
});
此处视图是您的WebView对象。 :)它的原生方法,所以它会正常工作。