Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当内容足够小时自动禁用HorizontalScrollView_Android_Android Viewpager_Horizontalscrollview - Fatal编程技术网

Android 当内容足够小时自动禁用HorizontalScrollView

Android 当内容足够小时自动禁用HorizontalScrollView,android,android-viewpager,horizontalscrollview,Android,Android Viewpager,Horizontalscrollview,我使用HorizontalScrollView来包含一组动态TextView元素。它们被放入一个LinearLayout容器中,该容器是滚动视图的唯一子级: <HorizontalScrollView android:id="@+id/outline_container" android:layout_width="match_parent" android:layout_height="wrap_co

我使用
HorizontalScrollView
来包含一组动态
TextView
元素。它们被放入一个
LinearLayout
容器中,该容器是滚动视图的唯一子级:

<HorizontalScrollView android:id="@+id/outline_container"
                      android:layout_width="match_parent"
                      android:layout_height="wrap_content"                          
                      android:scrollbars="none"
                      android:requiresFadingEdge="horizontal"
                      android:fadingEdgeLength="16dp">

    <LinearLayout android:id="@+id/outline"
                  android:orientation="horizontal"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content" />
</HorizontalScrollView>

这是为了确保当(且仅当)文本超过可用宽度时,用户可以水平滚动文本

但是:在很多情况下,文本足够短,可以在屏幕上显示。因此,id为
大纲的
线性布局
容器
完全适合
水平滚动视图

问题是:水平滑动手势仍然被捕捉到,但不应该被捕捉到,因为整个动作都在
ViewPager
中,它本身想要处理水平滑动


我正在寻找一种解决方案,仅当内容空间太有限时才启用此
HorizontalScrollView
的滚动。

为了防止HorizontalScrollView滚动,您必须重写onTouchEvent方法以返回false。这让我创建了自己的HSV,如下所示:

public class MyHorizontalScrollView extends HorizontalScrollView{


    boolean tooSmall = true;

    public MyHorizontalScrollView(Context context) {
        super(context);
    }

    public MyHorizontalScrollView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyHorizontalScrollView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void setTooSmall(boolean tooSmall){
        this.tooSmall = tooSmall;
    }

    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        if(tooSmall)
            return false;
        else
            return super.onTouchEvent(ev);
    }
}
然后,使用此自定义视图替换HSV后,需要监视LinearLayout(R.id.outline)的大小,以查看它是否小于或大于HSV。添加这个片段帮助我实现了这个目标

ll = (LinearLayout) view.findViewById(R.id.outline);
hsv = (MyHorizontalScrollView) view.findViewById(R.id.outline_container);
ll.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {

            Log.d("widths", ll.getWidth() + " : " + hsv.getWidth());
            hsv.setTooSmall(ll.getWidth() < hsv.getWidth());
        }
});
ll=(LinearLayout)view.findviewbyd(R.id.outline);
hsv=(MyHorizontalScrollView)view.findViewById(R.id.outline\u容器);
ll.getViewTreeObserver().addOnGlobalLayoutListener(新ViewTreeObserver.OnGlobalLayoutListener()){
@凌驾
公共图书馆{
Log.d(“宽度”,ll.getWidth()+:“+hsv.getWidth());
setToosall(ll.getWidth()