好吧我正在尝试构建一个具有水平滚动视图的活动,用户可以滑动以查看不同的“页面”。我的思路是这些“页面”将是意见。以下是我的想法的模型(乱七八糟地看看它是否有效)
我已按如下方式对此进行了实验:
我的内容视图设置为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流血)。
我是以错误的方式接近这个,和/或是否有可能按照我的方式进行这项工作?
答案 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。