首页 > 解决方案 > ScrollView 填满整个屏幕

问题描述

我正在编写一个具有垂直父 LinearLayout 的简单 android 应用程序。作为孩子,我想要一个 ScrollView、两个编辑文本,然后是一个按钮。

scrollView 内部是许多按钮。当我在其中放置许多按钮时,ScollView 会占据整个屏幕。我仍然希望 EditTexts 和 final 按钮可见。

public class MainActivity extends AppCompatActivity
{
    LinearLayout mainLayout;
    ScrollView scrollView;
    LinearLayout fileSelector;

    EditText name;
    EditText password;
    Button submit;

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

        mainLayout = new LinearLayout(this);
        mainLayout.setOrientation(LinearLayout.VERTICAL);

        fileSelector = new LinearLayout(this);
        fileSelector.setOrientation(LinearLayout.VERTICAL);
        scrollView = new ScrollView(this);
        scrollView.addView(fileSelector);

        mainLayout.addView(scrollView);

        name = new EditText(this);
        password = new EditText(this);
        submit = new Button(this);
        submit.setText("Login");


        for(int i=0; i<100; i++)
        {
            Button b = new Button(this);
            b.setText("hello");
            fileSelector.addView(b);
        }

        mainLayout.addView(name);
        mainLayout.addView(password);
        mainLayout.addView(submit);

        setContentView(mainLayout);
    }


    public void onClick(View v)
    {


    }
}

在此处输入图像描述

我想以编程方式了解解决方案。

标签: androidscrollview

解决方案


更改此行:

mainLayout.addView(scrollView);

为此:

LinearLayout.LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 0);
params.weight = 1;

mainLayout.addView(scrollView, params);

LinearLayout 支持weight的概念,它将根据父 LinearLayout 中有多少可用空间来“拉伸”视图。

在这种情况下,ScrollView当您将两个 EditText 和提交按钮保留为正常大小时,您将其设为零像素。这不会填满 LinearLayout,因此会应用权重。所有具有权重的视图都会根据它们的权重比率在它们之间分配额外的空间,但是这里我们只有一个具有权重的视图,因此它只会获得所有额外的空间。

这意味着您的 EditTexts 和提交按钮将始终可见,并且 ScrollView 将获得剩余的空间,无论屏幕大小。


推荐阅读