android - studio - Deshabilitar deslizar entre pestañas
tabs android studio material design (2)
La forma más simple es setOnTouchListener
y devolver true
para ViewPager
.
respuesta original: https://stackoverflow.com/a/13392198/4293813
Configuro pestañas deslizantes con dos Fragment
cada Fragment
tiene un Button
que va a una WebView
. El problema con esto es cuando se hace clic en el Button
WebView
las pestañas deslizantes todavía están activadas y cuando un usuario intenta navegar dentro de WebView
, termina deslizando hacia la otra pestaña. ¿Hay alguna manera en un método de hacer clic para desactivar la capacidad de deslizar de las pestañas? ¡Cualquier ayuda sería muy apreciada!
Aquí el código:
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;
}
Esta respuesta se puede aplicar a cualquier ViewPager en realidad, sin importar cuál es la biblioteca que está utilizando para implementar las pestañas o incluso una ViewPager normal sin pestañas.
La biblioteca que está utilizando github.com/neokree/MaterialTabs está respaldada con un ViewPager que es responsable del efecto de deslizamiento y puede deshabilitarlo al proporcionar su propio ViewPager personalizado.
ViewPager con paginación deshabilitada todo el tiempo
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;
}
}
O ViewPager con paginación activable o desactivable en cualquier momento.
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;
}
}
Esta clase proporciona una ViewPager que está habilitada para deslizar y puede desactivarla mediante viewPager.setPagingEnabled(false);
Sin mencionar que debe cambiar el diseño XML a su nueva ViewPager personalizada en lugar de la original.
<android.support.v4.view.ViewPager
...
/>
a
<my.package.CustomViewPager
...
/>