Как программно установить один вид в вертикальном линейном расположении сверху, а другой внизу? - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь программно создать родительский 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 голосов
/ 03 июля 2018
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);
0 голосов
/ 02 июля 2018

Чтобы заполнить LinearLayout все доступное пространство, необходимо установить атрибут android:layout_weight для среднего потомка View. Вы можете сделать это программно, используя конструктор , который принимает вес в качестве третьего параметра :

LinearLayout.LayoutParams linlayout_params2 =
            new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
                                          LinearLayout.LayoutParams.WRAP_CONTENT, 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...