Умножьте RelativeLayout по вертикали LinearLayout на код - PullRequest
0 голосов
/ 05 мая 2019

У меня есть приложение, которое состоит из LinearLayout, который должен содержать несколько RelativeLayout.

Ниже вы видите код RelativeLayout, который предполагается умножить в несколько раз. Как код я делаю это с помощью кода Java?

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="15dp">

            <TextView
                android:id="@+id/txtName1"
                android:layout_width="80dp"
                android:layout_height="wrap_content"
                android:layout_alignParentLeft="true"
                android:text="TextView" />                

            <EditText
                android:id="@+id/edit1"
                android:layout_width="55dp"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_toEndOf="@id/txtName1"
                android:ems="10"
                android:inputType="number" />

            <Switch
                android:id="@+id/switch1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20dp"
                android:layout_toEndOf="@id/edit1" />
        </RelativeLayout>
</LinearLayout>

1 Ответ

0 голосов
/ 05 мая 2019

Вот мое решение:

public class MainActivity extends AppCompatActivity {

    private static final int FIRST_ROW_ID = 100;
    private static final int SECOND_ROW_ID = 101;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        LinearLayout layoutContainer = findViewById(R.id.linear_layout_container);

        View firstRow = getLayoutInflater().inflate(R.layout.layout_part, layoutContainer, false);
        View secondRow = getLayoutInflater().inflate(R.layout.layout_part, layoutContainer, false);

        firstRow.setId(FIRST_ROW_ID);
        secondRow.setId(SECOND_ROW_ID);

        layoutContainer.addView(firstRow);
        layoutContainer.addView(secondRow);

        EditText editText = firstRow.findViewById(R.id.edit1);
        editText.setText("Hello");

        EditText editText2 = secondRow.findViewById(R.id.edit1);
        editText2.setText("World");
    }
}

activity_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">
    <LinearLayout
        android:id="@+id/linear_layout_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"/>
</FrameLayout>

layout_part.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="15dp"
    android:id="@+id/relative_layout"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:id="@+id/txtName1"
        android:layout_width="80dp"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:text="TextView" />

    <EditText
        android:id="@+id/edit1"
        android:layout_width="55dp"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_toEndOf="@id/txtName1"
        android:ems="10"
        android:inputType="number" />

    <Switch
        android:id="@+id/switch1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_toEndOf="@id/edit1" />
</RelativeLayout>

То, что я делаю здесь, относительнопросто: root layout (activity_main.xml) просто определяет LinearLayout.Это будет контейнер, содержащий все строки.

Чтобы создать строки без объявления каждого свойства с помощью кода Java, я извлек RelativeLayout и поместил его в отдельный файл (layout_part.xml).

Теперь в упражнении я просто инициализирую layoutContainer, а затем inflate layout of the row так часто, как это необходимо.Обратите внимание, что третий параметр (attachToRoot) имеет значение false getLayoutInflater().inflate(R.layout.layout_part, layoutContainer, false).

. Причина этого заключается в следующем: если задано значение true, компоновка будет немедленно добавлена ​​к layoutContainer и, следовательно,идентификаторы не будут уникальными (например, у вас будет несколько идентификаторов editText1).Поэтому я говорю инфлятору: эй, я сам добавлю эти Views, как только буду готов.

Итак, как идентификаторы будут уникальными?Ну, просто назначьте разные идентификаторы для каждого из раздутых макетов.

После этого просто добавьте строки в layoutContainer, а затем я просто установил текст на EditText каждой строки, чтобы доказать, что это работает.

Вот и все!Если у вас есть дополнительные вопросы - просто спросите:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...