Добавить представление к уже существующей xml viewgroup в коде - PullRequest
5 голосов
/ 01 сентября 2011

Я хотел бы иметь возможность добавить представление к уже существующему макету XML в коде:

        LinearLayout ll = (LinearLayout) findViewById(R.layout.common_list);

        TextView tv = new TextView(this);
        tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        tv.setText("sample text");
        ll.addView(tv);

        setContentView(ll); 

При создании нового LinearLayout в коде это работает, но при использовании Resource, как в кодевыше этого нет.

common_list.xml:

<?xml version="1.0" encoding="UTF-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
    android:gravity="center_horizontal"
    android:text="Quick List"/>

</LinearLayout>

1 Ответ

7 голосов
/ 01 сентября 2011

Попробуйте использовать LayoutInflater

LinearLayout ll = (LinearLayout) LayoutInflater.from(this).inflate(R.layout.common_list)
TextView tv = new TextView(this);
tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tv.setText("sample text");
ll.addView(tv);

setContentView(ll);

Если это не сработает, пожалуйста, добавьте ошибку из Logcat.

Кроме того, вы должны изменить свойства с android: layout_width = "fill_parent" на android: layout_width = "wrap_content" в yout LinearLayout в common_list.xml, а также сделать то же самое с вашим TextView в common_list.xml

Почему? Потому что ваш макет ориентирован горизонтально и заполняет все пространство экрана. Ваш TextEdit занимает столько же места, сколько ваш макет (так что в этом случае это все пространство экрана). Теперь, когда вы добавляете другой TextView, он добавляется правильно - справа от вашего первого TextEdit, так что это как вне экрана. Чтобы точно понять, что происходит:

-----------------
||-------------||---------------
||| TextViev1 ||||addedTextView|
||-------------||---------------
||             ||
||             ||
||             ||
||             ||
||             ||
||LinearLayout ||
||-------------||
|    screen     |
----------------

У меня тоже была эта проблема много раз. Обычно, если вы добавляете вид в макет и не видите его (и вы не получаете ошибок), проблема заключается в ширине / высоте или позиции (например, при использовании RelativeLayout).

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