如何以编程方式在顶部的垂直linearlayout中设置一个视图,在底部设置一个视图?

时间:2018-07-02 19:41:14

标签: java android android-layout

我正在尝试以编程方式创建父级LinearLayout 和3个TextViews。 一个TextView必须在左上角对齐,第二个在父级中心对齐 第三个位于屏幕的右侧和底部。一切都必须用代码完成。 我快完成了,但是仍然有一些问题。 我所有3个视图均位于顶部 enter image description here

我的代码:

public class ActivityFour extends AppCompatActivity {
    private LinearLayout mLinearLayout;
    private TextView tv1;
    private TextView tv2;
    private TextView tv3;

    private static final int TV_ID1 = 101;
    private static final int TV_ID2 = 102;
    private static final int TV_ID3 = 103;

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

        mLinearLayout = new LinearLayout(this);
        mLinearLayout.setOrientation(LinearLayout.VERTICAL);
        ViewGroup.LayoutParams llParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT);
        setContentView(mLinearLayout, llParams);


        LinearLayout.LayoutParams linlayout_params1 =
                new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                              LinearLayout.LayoutParams.WRAP_CONTENT);

        LinearLayout.LayoutParams linlayout_params2 =
                new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                              LinearLayout.LayoutParams.WRAP_CONTENT);

        LinearLayout.LayoutParams linlayout_params3 =
                new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                              LinearLayout.LayoutParams.WRAP_CONTENT);

        linlayout_params1.setMargins(16,16,16,16);
        tv1 = new TextView(this);
        tv1.setId(TV_ID1);
        linlayout_params1.gravity = Gravity.START;
        linlayout_params1.gravity = Gravity.TOP;

        mLinearLayout.addView(tv1, linlayout_params1);
        tv1.setText("TextView number ONE");

        linlayout_params2.setMargins(16,16,16,16);
        tv2 = new TextView(this);
        tv2.setId(TV_ID2);
        linlayout_params2.gravity = Gravity.CENTER;
        mLinearLayout.addView(tv2, linlayout_params2);
        tv2.setText("TextView number TWO");

        linlayout_params3.setMargins(16,16,16,16);
        tv3 = new TextView(this);
        tv3.setId(TV_ID3);
        linlayout_params3.gravity = Gravity.END;
        mLinearLayout.addView(tv3, linlayout_params3);
        tv3.setText("TextView number THREE");
    }
}

将weight属性添加到所有view.params后,它看起来像这样 enter image description here

2 个答案:

答案 0 :(得分:1)

为了使LinearLayout填充所有可用空间,您需要在中间子级android:layout_weight上设置View属性。您可以使用Constructor which takes the weight as third parameter

以编程方式进行操作
LinearLayout.LayoutParams linlayout_params2 =
            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                          LinearLayout.LayoutParams.WRAP_CONTENT, 1);

答案 1 :(得分:0)

First of all no need to create liner layout for all textview you can do like this:

in xml file :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/test"
    tools:context=".activity.TestActivity"/>

and in activity file :

LinearLayout layout = findViewById(R.id.test);

        TextView product_1 = new TextView(this);
        product_1.setText("Product 1");
        product_1.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1f));
        layout.addView(product_1);

        TextView product_2 = new TextView(this);
        product_2.setText("Product 2");
        product_2.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1f));
        product_2.setGravity(Gravity.CENTER);
        layout.addView(product_2);

        TextView product_3 = new TextView(this);
        product_3.setText("Product 3");
        product_3.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,0,1f));
        product_3.setGravity(Gravity.END|Gravity.BOTTOM);
        layout.addView(product_3);
相关问题