禁用选项卡之间的滑动
Disable swiping between tabs
我设置了带有两个 Fragment
的滑动选项卡,每个 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 is backed with a ViewPager that is responsible for the swiping effect and you can disable that by using the new ViewPager2 或提供您自己的自定义 ViewPager。
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var isPagingEnabled: Boolean = true
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onTouchEvent(event)
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onInterceptTouchEvent(event)
}
}
此 class 提供了一个启用滑动的 ViewPager,您可以通过 viewPager.isPagingEnabled = false
将其关闭
更不用说您必须将 XML 布局更改为新的自定义 ViewPager 而不是原始布局。
<androidx.viewpager.widget.ViewPager
...
/>
至
<my.package.CustomViewPager
...
/>
最简单的方法是 setOnTouchListener
和 return true
for ViewPager
.
原答案:
已接受的答案的 AndroidX 和 Kotlin 版本:
一直禁用分页的 ViewPager
package your.packg.name //CustomViewPager's location actually
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(
context: Context?,
attrs: AttributeSet?
) :
ViewPager(context!!, attrs) {
override fun onTouchEvent(event: MotionEvent): Boolean {
return false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return false
}
}
可随时打开或关闭分页的 ViewPager。
package your.packg.name //CustomViewPager's location actually
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(
context: Context?,
attrs: AttributeSet?
) :
ViewPager(context!!, attrs) {
var isPagingEnabled = false //Modify this in code for switch
override fun onTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onTouchEvent(event)
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onInterceptTouchEvent(event)
}
}
最后,在 XML 文件中找到 ViewPager 行并根据您的 CustomViewPager 位置进行修改,即:
<your.packg.name.CustomViewPager ...
科特林:
使用 ViewPager2...
viewPager.isUserInputEnabled = false
标签之间的滑动被禁用,用户仍然可以点击顶部的标签在标签之间切换。
我设置了带有两个 Fragment
的滑动选项卡,每个 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 is backed with a ViewPager that is responsible for the swiping effect and you can disable that by using the new ViewPager2 或提供您自己的自定义 ViewPager。
import android.annotation.SuppressLint
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(context: Context, attrs: AttributeSet) : ViewPager(context, attrs) {
var isPagingEnabled: Boolean = true
@SuppressLint("ClickableViewAccessibility")
override fun onTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onTouchEvent(event)
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onInterceptTouchEvent(event)
}
}
此 class 提供了一个启用滑动的 ViewPager,您可以通过 viewPager.isPagingEnabled = false
更不用说您必须将 XML 布局更改为新的自定义 ViewPager 而不是原始布局。
<androidx.viewpager.widget.ViewPager
...
/>
至
<my.package.CustomViewPager
...
/>
最简单的方法是 setOnTouchListener
和 return true
for ViewPager
.
原答案:
已接受的答案的 AndroidX 和 Kotlin 版本:
一直禁用分页的 ViewPager
package your.packg.name //CustomViewPager's location actually
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(
context: Context?,
attrs: AttributeSet?
) :
ViewPager(context!!, attrs) {
override fun onTouchEvent(event: MotionEvent): Boolean {
return false
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return false
}
}
可随时打开或关闭分页的 ViewPager。
package your.packg.name //CustomViewPager's location actually
import android.content.Context
import android.util.AttributeSet
import android.view.MotionEvent
import androidx.viewpager.widget.ViewPager
class CustomViewPager(
context: Context?,
attrs: AttributeSet?
) :
ViewPager(context!!, attrs) {
var isPagingEnabled = false //Modify this in code for switch
override fun onTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onTouchEvent(event)
}
override fun onInterceptTouchEvent(event: MotionEvent): Boolean {
return isPagingEnabled && super.onInterceptTouchEvent(event)
}
}
最后,在 XML 文件中找到 ViewPager 行并根据您的 CustomViewPager 位置进行修改,即:
<your.packg.name.CustomViewPager ...
科特林:
使用 ViewPager2...
viewPager.isUserInputEnabled = false
标签之间的滑动被禁用,用户仍然可以点击顶部的标签在标签之间切换。