Добавить TextView в программно созданный LinearLayout

276
29 августа 2017, 10:44

Вот код:

LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.setPadding(dpToPx(left), dpToPx(top), dpToPx(right), dpToPx(bottom));
linearLayout.setBackgroundColor(Color.parseColor(c.getString(c.getColumnIndex(dbHelper.KEY_MAINCOLOR))));
TextView newTextView = new TextView(this);
newTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
newTextView.setTextColor(Color.parseColor("#ffffff"));
newTextView.setText("123456");
linearLayout.addView(newTextView);
toAddGroups.addView(linearLayout);

Но он почему-то он работает не правильно: Создается два linearLayout, но пустые, без TextView. Что я делаю не так?

Причем, если я добавляю такой textView в toAddGroups, то он добавляется.

Answer 1

Добавить TextView в программно созданный LinearLayout

Пусть корневым контейнером у нас будет FrameLayout, то есть:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/root_frame_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

Создаем LinearLayout и задаем ему атрибуты:

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

Создаем и конфигурируем TextView:

TextView textView = new TextView(this);
textView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
textView.setText("New TextView");

Добавляем созданный TextView в LinearLayout, а затем LinearLayout в корневой FrameLayout:

linearLayout.addView(textView);
mRootFrameLayout.addView(linearLayout);

Касательно Вашего примера: я чуть-чуть изменил код (вручную задал отступы и цвета):

mRootFrameLayout = (FrameLayout) findViewById(R.id.root_frame_layout);
LinearLayout linearLayout = new LinearLayout(this);
linearLayout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
linearLayout.setPadding(5, 5, 5, 5);
linearLayout.setBackgroundColor(Color.parseColor("#00FF00"));
TextView newTextView = new TextView(this);
newTextView.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
newTextView.setTextColor(Color.parseColor("#ffffff"));
newTextView.setText("123456");
linearLayout.addView(newTextView);
mRootFrameLayout.addView(linearLayout);

И этот код работает корректно. Проверьте, какой цвет Вы устанавливаете для linearLayout, не #ffffff случайно? В таком случае надпись будет сливаться с фоном.

READ ALSO
Сложные условия в switch

Сложные условия в switch

Есть if, а есть switchЕсли использовать if то "или" будет записываться как ( условие | условие )

232
GET/POST запросы с максимально простым кодом

GET/POST запросы с максимально простым кодом

Мне нужно написать обобщённые методы: GET, POST, PUT, DELETE

330
Исключение @Controller не работает

Исключение @Controller не работает

У меня есть два артефакта, которые включены в основной проектПервый содержит пакет com

245
Загрузка XML разметки в фоне

Загрузка XML разметки в фоне

Добрый вечер! Имеется цель во время отображения первой активности (экрана загрузки) подгрузить вторую разметку в фоне, чтобы приложение не пыталось...

277