Android textField填充父级的剩余高度

Android textField fill remaining height of parent

我是 android 的新手,我正在尝试做一些非常基本的事情.. 我想要一个包含 2 个 textFields

的布局

这是我目前所做的:

// LinearLayout
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

// TextView1
final TextView textView1 = new TextView(this);
textView1.setText(R.string.app_name);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
textView1.setBackgroundColor(ContextCompat.getColor(this, R.color.red));
LinearLayout.LayoutParams lyp1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 100);
linearLayout.addView(textView1, lyp1);

// TextView2
final TextView textView2 = new TextView (this);
textView2.setText(R.string.app_name);
textView2.setBackgroundColor(ContextCompat.getColor(this, R.color.blue));
LinearLayout.LayoutParams lyp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
linearLayout.addView(textView2, lyp2);

但是我不知道怎么说第二个应该在第一个之后一直到布局的底部。

我该怎么办?

谢谢

首先你应该使用线性布局task.But如果你想把它放在RelativeLayout那么解决方案如下

1-您应该将第二个 textView 的高度设置为 match_parent

2-RelativeLayout.END_OF 会将您的布局对齐到 textview1.So 的右侧使用 RelativeLayout.BOTTOM

3-RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,100);会将您的 textview 的高度设置为 100 像素(像素大小因设备而异)。因此在 dp 中设置高度,如下所示

DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
            float dp = displayMetrics.density; 
RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int)(100*dp));

试试这个-

//density of device
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        float dp = displayMetrics.density; 

// RelativeLayout
RelativeLayout relativeLayout = new RelativeLayout(this);
relativeLayout.setLayoutParams(new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT));

// TextView1
final TextView textView1 = new TextView(this);
textView1.setText(R.string.app_name);
textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
textView1.setBackgroundColor(ContextCompat.getColor(this, R.color.red));
RelativeLayout.LayoutParams lyp1 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, (int)(100*dp));
lyp1.addRule(RelativeLayout.ALIGN_PARENT_TOP, RelativeLayout.TRUE);
relativeLayout.addView(textView1, lyp1);

// TextView2
final TextView textView2 = new TextView (this);
textView2.setBackgroundColor(ContextCompat.getColor(this, R.color.blue));
RelativeLayout.LayoutParams lyp2 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
lyp2.addRule(RelativeLayout.BOTTOM, textView1.getId());
relativeLayout.addView(imageView1, lyp2);

mainLinearLayout.addView(relativeLayout);

不要为此类任务使用相对布局。它比 LinearLayout 慢,并且可以使用 LinearLayout 轻松完成。使用 layoutWeight,如下例所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:orientation="vertical" android:layout_width="match_parent"
 android:layout_height="match_parent">
 <TextView 
 android:layout_height="100dp" android:layout_width="match_parent"
 />
 <TextView 
 android:layout_height="0dp" android:layout_width="match_parent"
 android:layout_weight="1" />
</LinearLayout>

为了从代码中设置 layout_weight,请执行以下操作:

    public static int dpToPx(int dp)
{
    return (int) (dp * Resources.getSystem().getDisplayMetrics().density);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
 // LinearLayout
    LinearLayout linearLayout = new LinearLayout(this);
    linearLayout.setOrientation(LinearLayout.VERTICAL);
    linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));

    // TextView1
    final TextView textView1 = new TextView(this);
    textView1.setText(R.string.app_name);

    textView1.setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
    textView1.setBackgroundColor(Color.RED);
    LinearLayout.LayoutParams lyp1 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, dpToPx(100));
    linearLayout.addView(textView1, lyp1);

    // TextView2
    final TextView textView2 = new TextView (this);
    textView2.setText(R.string.app_name);
    textView2.setBackgroundColor(Color.BLUE);
    LinearLayout.LayoutParams lyp2 = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT, 1.0f);
    linearLayout.addView(textView2, lyp2);

    setContentView(linearLayout);
}