两个方向滚动视图

Bry*_*eld 12 android scroll android-layout

我希望有一个linearoutout,顶部有一个标题部分,下面是一个webview.标题会很短,webview可能比屏幕更长更宽.

获得水平和垂直滚动的最佳方法是什么?ScrollView嵌套在Horizo​​ntalScrollView中是个好主意吗?

Com*_*are 8

ScrollView嵌套在Horizo​​ntalScrollView中是个好主意吗?

是的,不.

是的,我的理解是,ScrollView并且HorizontalScrollView可以嵌套.

不,AFAIK,既不合作ScrollView也不HorizontalScrollView合作WebView.

我建议你WebView适应屏幕.


MrC*_*eeJ 8

更进一步,我认为开源社区可能需要你的救援: 2D滚动视图.

编辑:链接不再起作用,但这里是一个旧版博客文章的链接 ;

  • 3年后,线路已经消失 (13认同)
  • 链接又死了。我用这个类创建了一个库项目,并将其推送给其他人的 maven:https://github.com/jaredrummler/TwoDScrollView (2认同)

was*_*uss 7

还有另一种方式.将Horizo​​ntalScrollView修改为ScrollView的包装器.正常Horizo​​ntalScrollView当catch触摸事件没有将它们转发到ScrollView时你只能在一次滚动.这是解决方案:

package your.package;

import android.widget.HorizontalScrollView;
import android.widget.ScrollView;
import android.view.MotionEvent;
import android.content.Context;
import android.util.AttributeSet;

public class WScrollView extends HorizontalScrollView
{
    public ScrollView sv;
    public WScrollView(Context context)
    {
        super(context);
    }

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

    public WScrollView(Context context, AttributeSet attrs, int defStyle)
    {
        super(context, attrs, defStyle);
    }

    @Override public boolean onTouchEvent(MotionEvent event)
    {
        boolean ret = super.onTouchEvent(event);
        ret = ret | sv.onTouchEvent(event);
        return ret;
  }

    @Override public boolean onInterceptTouchEvent(MotionEvent event)
    {
        boolean ret = super.onInterceptTouchEvent(event);
        ret = ret | sv.onInterceptTouchEvent(event);
        return ret;
    }
}
Run Code Online (Sandbox Code Playgroud)

使用:

    @Override public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

/*BIDIRECTIONAL SCROLLVIEW*/
        ScrollView sv = new ScrollView(this);
        WScrollView hsv = new WScrollView(this);
        hsv.sv = sv;
/*END OF BIDIRECTIONAL SCROLLVIEW*/

        RelativeLayout rl = new RelativeLayout(this);
        rl.setBackgroundColor(0xFF0000FF);
        sv.addView(rl, new LayoutParams(500, 500));
        hsv.addView(sv, new LayoutParams(WRAP_CONTENT, MATCH_PARENT /*or FILL_PARENT if API < 8*/));
        setContentView(hsv);
    }
Run Code Online (Sandbox Code Playgroud)

  • 有趣的是,垂直滚动不再起作用. (2认同)