2つのFragment
sでスライディングタブを設定します。それぞれFragment
にはButton
に移動するWebView
があります。これに関する問題は、WebView
Button
がクリックされたときにスライドタブがアクティブになり、ユーザーがWebView
内をナビゲートしようとすると、他のタブにスワイプすることになります。クリックの方法でタブのスワイプ機能を無効にする方法はありますか?どんな助けでも大歓迎です!
ここにコード:
public class MyWebViewClass extends Fragment {
private WebView mWebView;
private Button mButton;
public MyWebViewClass() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_webview, container, false);
mWebView = (WebView) view.findViewById(R.id.WebView);
mButton = (Button) view.findViewById(R.id.Button1);
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mWebView.setVisibility(View.VISIBLE);
mButton.setVisibility(View.GONE);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.loadUrl("www.google.com");
}
});
return view;
}
この回答は、実際にタブを実装するために使用しているライブラリが何であれ、タブのない通常のViewPagerであっても、ViewPagerに適用できます。
neokree/MaterialTabs を使用しているライブラリは、スワイプ効果を担当するViewPagerでサポートされており、独自のカスタムViewPagerを提供することで無効にできます。
_import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;
public class CustomViewPager extends ViewPager {
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return false;
}
}
_
_import Android.content.Context;
import Android.support.v4.view.ViewPager;
import Android.util.AttributeSet;
import Android.view.MotionEvent;
public class CustomViewPager extends ViewPager {
private boolean enabled;
public CustomViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.enabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
return enabled && super.onTouchEvent(event);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
return enabled && super.onInterceptTouchEvent(event);
}
public void setPagingEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isPagingEnabled() {
return enabled;
}
}
_
このクラスは、スワイプ対応のViewPagerを提供します。viewPager.setPagingEnabled(false);
でオフにできます
もちろん、元のレイアウトではなく、新しいカスタムViewPagerにXMLレイアウトを変更する必要があります。
_<Android.support.v4.view.ViewPager
...
/>
_
に
_<my.package.CustomViewPager
...
/>
_
最も簡単な方法は、setOnTouchListener
に対してtrue
を返し、ViewPager
を返すことです。