Android如何以编程方式创建scrollview并将编程创建的视图添加到其中

时间:2013-06-18 21:25:59

标签: android android-layout android-widget scrollview

好吧我正在尝试构建一个具有水平滚动视图的活动,用户可以滑动以查看不同的“页面”。我的思路是这些“页面”将是意见。以下是我的想法的模型(乱七八糟地看看它是否有效)

我已按如下方式对此进行了实验:

我的内容视图设置为scrollview。 (不确定这是否是一种不正确的方法)

我创建了scrollview,并按如下方式将视图放入其中:

private void setupScrollView()
{
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    float density  = getResources().getDisplayMetrics().density;
    float dpHeight = outMetrics.heightPixels / density;
    float dpWidth  = outMetrics.widthPixels / density;

    int width = (int)MeasureUtils.convertDpToPixel(dpWidth, getApplicationContext());
    int height = (int)MeasureUtils.convertDpToPixel(dpHeight, getApplicationContext());

    _scrollView = new HorizontalScrollView(getApplicationContext());
    _scrollView.setBackgroundColor(Color.CYAN);
    _scrollView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

     Log.i("DEBUG", "Screen dp width = " + dpWidth + " screen dp height = " + dpHeight);

    TextView view = new TextView(getApplicationContext());
    view.setBackgroundColor(Color.RED);
    view.setText("TEST");

    view.setX(0); // Start at the left of the scrollview.

    view.setWidth(width); // Size it so that it fills to the right of the scrollview.

    TextView view2 = new TextView(getApplicationContext());
    view2.setBackgroundColor(Color.GREEN);
    view2.setText("TEST2");

    view2.setX(width); // Start the second "page/view" offscreen to the right where i can scroll to it

    view.setWidth(width); // Fill the screen width

    LinearLayout layout = new LinearLayout(getApplicationContext());
    layout.setBackgroundColor(Color.MAGENTA);

    layout.addView(view);

    layout.addView(view2);

    _scrollView.addView(layout);
}

上面的想法是我会看到一个视图,占据屏幕,代表一个页面。该视图应为“红色”颜色。然后我可以水平向右滚动,看到代表下一页的第二个视图(view2)。这个视图应该是“绿色”的颜色。这不会发生。我最终看到看起来像我的屏幕的1/3或1/2的是view1,线性布局占据了几乎整个屏幕(距离CYAN的右边缘有点差距) scrollview流血)。

我是以错误的方式接近这个,和/或是否有可能按照我的方式进行这项工作?

2 个答案:

答案 0 :(得分:1)

您可能不想使用横向滚动视图来创建“页面”。 试着看PageViewer

这会自动构建所有sywpe和inflating逻辑。

基本上,您会接到一个通话来膨胀某个页面。然后,您可以创建视图(如果您愿意,可以动态创建),然后返回要渲染的根。

答案 1 :(得分:0)

好吧,我已经弄清楚我做错了什么,结果证明这是非常小的......

完整的代码在这里:

    private void setupScrollView()
{
    Display display = getWindowManager().getDefaultDisplay();
    DisplayMetrics outMetrics = new DisplayMetrics ();
    display.getMetrics(outMetrics);

    float density  = getResources().getDisplayMetrics().density;
    float dpHeight = outMetrics.heightPixels / density;
    float dpWidth  = outMetrics.widthPixels / density;

    int width = (int)MeasureUtils.convertDpToPixel(dpWidth, getApplicationContext());
    int height = (int)MeasureUtils.convertDpToPixel(dpHeight, getApplicationContext());

    _scrollView = new HorizontalScrollView(getApplicationContext());
    _scrollView.setBackgroundColor(Color.CYAN);
    _scrollView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    Log.i("DEBUG", "Screen dp width = " + dpWidth + " screen dp height = " + dpHeight);

    TextView view = new TextView(getApplicationContext());
    view.setBackgroundColor(Color.RED);
    view.setText("TEST");

    view.setX(0);

    view.setWidth(width);
    view.setHeight(height - 50);

    TextView view2 = new TextView(getApplicationContext());
    view2.setBackgroundColor(Color.GREEN);
    view2.setText("TEST2");

    view2.setX(0);

    view2.setWidth(width);
    view2.setHeight(height - 50);

    LinearLayout layout = new LinearLayout(getApplicationContext());
    layout.setBackgroundColor(Color.MAGENTA);

    layout.addView(view);

    layout.addView(view2);

    _scrollView.addView(layout);


}

这会像我一样以编程方式创建一个水平滚动视图,但问题是我将第二个视图设置为" width"当它被设置为" 0"时可以看出:

view2.setX(0);

有了这个,我得到2"观点"类似于我的滚动视图中的页面,我可以轻扫。每个人占用整个页面。

讨厌关闭代码,这是我错过的简单修复:|

希望这可以帮助其他试图这样做的人。我会像Frank建议的那样调查PageViewer。