将滚动视图的 child 大小设为 1/3

Make child of scrollview 1/3 size

我有这个:

我的问题是我有一个 Linearlayout 包装器,里面有一个 scrollview 和一个 Linearlayout..我希望每个项目都是 scrollviews 高度的 1/3,无论我放入多少项目..

当我向 Linearlayout 添加项目时,它是线性布局,如果我添加 3 'items' 几乎没问题..但是如果我添加 8 个项目,它们都非常小且可滚动。这就是我想要的,但我希望它们的高度为 scrollview/linearlayout.

的 1/3

我希望它对齐,使其与我的第二个布局中的按钮一样大。

我似乎无法做到正确,希望它只是一个我拒绝看到的简单解决方案。

到目前为止我的代码:

<LinearLayout
                android:layout_width="match_parent"
                android:layout_height="0dip"
                android:orientation="vertical"
                android:layout_weight="75">
                <ScrollView
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:id="@+id/scrollView2"
                    android:layout_gravity="center_horizontal"
                    android:fillViewport="true"
                    android:scrollbarSize="5dp"
                    android:fadeScrollbars="false"
                    android:layout_marginRight="5dp"
                    android:layout_marginLeft="5dp"
                    android:scrollbarThumbVertical="@drawable/custom_scroll_style">
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:id="@+id/coats"
                        android:orientation="vertical"
                        android:weightSum="75">

                 </LinearLayout>
                </ScrollView>
            </LinearLayout>

这是我将 'children' 添加到由 scrollview

包裹的布局的方法
LinearLayout w0 = new LinearLayout(this);
        LinearLayout w1 = new LinearLayout(this);
        ImageView w2 = new ImageView(this);
        TextView w3 = new TextView(this);
        TextView w4 = new TextView(this);

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT, 25);
        params.setMargins(pixelToDp(0),pixelToDp(5),pixelToDp(0),pixelToDp(5));
        w0.setLayoutParams(params);
        w0.setOrientation(LinearLayout.HORIZONTAL);
        w0.setClickable(true);

        w0.setBackgroundColor(Color.argb(100, 100, 100, 100));
        w0.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                for (int i = 0; i < LLCoats.getChildCount(); i++) {
                    View vv = LLCoats.getChildAt(i);
                    vv.setSelected(false);
                    vv.setBackgroundColor(Color.argb(100, 100, 100, 100));
                }
                LinearLayout LL = (LinearLayout)LLCoats.getChildAt(i);
                TextView TV = (TextView)LL.getChildAt(1);
                TV.requestFocus();

                if(TV.getError() != null)
                {
                    Snackbar snackbar = Snackbar
                            .make(findViewById(android.R.id.content), ""+TV.getError(), Snackbar.LENGTH_LONG);
                    snackbar.show();
                }



                v.setSelected(true);
                v.setBackgroundColor(Color.argb(255,255,255,255));
            }
        });

        LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 2);
        w1.setLayoutParams(params2);
        w1.setOrientation(LinearLayout.VERTICAL);
        w1.setClickable(false);

        LinearLayout.LayoutParams params3 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1);
        w2.setLayoutParams(params3);
        w2.setScaleType(ImageView.ScaleType.FIT_CENTER);      

        LinearLayout.LayoutParams params4 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1);
        w3.setLayoutParams(params4);
        w3.setTextSize(25f);
        w3.setGravity(Gravity.CENTER);
        w3.setClickable(false);

        LinearLayout.LayoutParams params5 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT,1);
        w4.setLayoutParams(params5);
        w4.setTextSize(45f);
        w4.setGravity(Gravity.CENTER);
        w4.setClickable(false);

        w1.addView(w2);
        w1.addView(w3);

        w0.addView(w1);
        w0.addView(w4);

        LLCoats.addView(w0);

更新!:

现在它变得非常奇怪,因为我找到了一种计算高度并添加它的方法:

DisplayMetrics display = this.getResources().getDisplayMetrics();

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, pixelToDp((int)(display.heightPixels* .8 * 0.25)));

这在我的 PI64 和 ASUS 平板电脑上运行得非常好,但是我的 phone 使高度与滚动视图 100% 相同,这是怎么回事??

我让它像这样工作,获得屏幕尺寸 *.8,因为屏幕用作弹出窗口,然后是 0.25,因为项目占屏幕的 1/4,最后 -10 作为我的边距

DisplayMetrics display = this.getResources().getDisplayMetrics();        

        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, (int)(display.heightPixels* .8 * 0.25 - pixelToDp(10)));       

        params.setMargins(pixelToDp(0),pixelToDp(5),pixelToDp(0),pixelToDp(5));