我想在PagerTabStrip上禁用标签点击/触摸事件。基本上我只希望用户能够刷卡。我想要标签的外观,但没有触摸/点击事件。我不确定下面的xml中是否有可配置的内容。或者如果代码中有某些东西我可以做。我已经尝试覆盖了条带上的触控和onclick听众。但没有运气。
<android.support.v4.view.ViewPager 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:id="@+id/myId">
<android.support.v4.view.PagerTabStrip
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:id="@+id/tabStripID"
android:background="@color/dark_blue"
android:textColor="@color/text"/>
</android.support.v4.view.ViewPager>
答案 0 :(得分:5)
覆盖PagerTabStrip上的onClick侦听器不会执行任何操作,因为onClick侦听器实际上位于PagerTabStrip类中包含的两个TextView(前一个和下一个选项卡的文本)上,并且PagerTabStrip上当前没有API可以直接访问/覆盖这些听众。以下是解决此问题的解决方案(并且也没有进入内部PagerTabStrip实现的杂草)。
我验证了以下工作:
创建您自己的PagerTabStrip并通过返回true来使用onInterceptTouchEvent()中的触摸事件。这将阻止任何PagerTabStrip的内部onClick侦听器接收触摸事件并执行制表符切换。
public class MyPagerTabStrip extends PagerTabStrip {
private boolean isTabSwitchEnabled;
public MyPagerTabStrip(Context context, AttributeSet attrs) {
super(context, attrs);
this.isTabSwitchEnabled = true;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.isTabSwitchEnabled) {
return super.onInterceptTouchEvent(event);
} else {
return true;
}
}
public void setTabSwitchEnabled(boolean isSwipeEnabled) {
this.isTabSwitchEnabled = isSwipeEnabled;
}
}
我假设您还要禁用也会导致制表符切换的ViewPager滑动。以下代码执行此操作(此处,您必须在onTouch()和onInterceptTouch()中返回false而不是true以允许正常触摸事件到达当前选项卡片段):
public class MyViewPager extends ViewPager {
private boolean isSwipeEnabled;
public MyViewPager(Context context, AttributeSet attrs) {
super(context, attrs);
this.isSwipeEnabled = true;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.isSwipeEnabled) {
return super.onTouchEvent(event);
}
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent event) {
if (this.isSwipeEnabled) {
return super.onInterceptTouchEvent(event);
}
return false;
}
public void setPagingEnabled(boolean isSwipeEnabled) {
this.isSwipeEnabled = isSwipeEnabled;
}
}
请记住更改XML文件以引用这些新类:
<com.mypackage.MyViewPager
...
<com.mypackage.MyPagerTabStrip
...
答案 1 :(得分:1)
Steve B的答案几乎正常,TabStrip中只缺少onTouchEvent()覆盖(与viewpager相同)。没有它,它仍然会收到点击和更改页面(至少在Android L上)。