Поле для динамического TextView из стиля не применяется - PullRequest
0 голосов
/ 02 июля 2019

У меня есть контейнер LinearLayout, который я заполняю с помощью TextViews.Я создал стиль для этих TextViews в styles.xml.Проблема в том, что поле не применяется, когда я динамически создаю текстовые представления в коде и применяю стиль.Все остальные значения из стиля на самом деле работают.

Я работаю в VS 2019, проект является родным приложением Xamarin для Android (не форм).Когда я заполняю LinearyLayout вручную с помощью TextViews и применяю стиль, он работает правильно, поле применяется.Это только не работает, когда TextView создается в коде позади.Также можно установить маржу программно, используя функции LayoutParams и SetMargin.Хотя я бы предпочел, чтобы часть стиля, определенного в xml, и один маленький бит в коде были позади.

Это стиль TextView:

<style name="TextView.Tag" parent="@android:style/Widget.TextView">
    <item name="android:background">@color/ColorSecondary</item>
    <item name="android:paddingHorizontal">4dp</item>
    <item name="android:paddingVertical">2dp</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">10dp</item>
    <item name="android:textColor">@color/ColorTextOnSecondary</item>
    <item name="android:layout_marginRight">8dp</item>
 </style>

Это контейнер LinearLayout:

<LinearLayout
    android:id="@+id/TeaTagsLayoutContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingVertical="4dp"
    android:layout_below="@id/TeaCategoryLayout"
    android:layout_toRightOf="@id/TeaCategoryImage">
</LinearLayout>

Это код, который добавляет, создает текстовое представление и помещает его в контейнер:

TextView tv = new TextView(context, null, 0, Resource.Style.TextView_Tag)
{
    Text = "tag text";
};

tagsLayoutContainer.AddView(tv);

Я ожидаю, что весь стиль, определенный в style.xml, будет работать с динамически созданными TextViews.

Спасибо за чтение.

1 Ответ

0 голосов
/ 02 июля 2019

Помните, android:layout_* атрибуты LayoutParams. Они являются аргументами для родителя и влияют на то, как родитель будет выполнять макет в этом представлении. Так как он не знает, какой родительский элемент TextView окажется в конечном итоге при его создании, атрибуты макета будут удалены.

Поскольку LayoutParams относятся к типу родительского представления, одним из решений будет предоставление экземпляра правильного родительского типа при раздувании макетов с использованием атрибутов LayoutInflater или layout_ в представлении верхнего уровня в макет будет сброшен. (Инфлятор не знает, какой тип LayoutParams генерировать.)

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