未应用样式的动态TextView的边距

时间:2019-07-02 11:09:29

标签: c# android-layout xamarin.android

我有一个LinearLayout容器,其中装有TextViews。我已经在styles.xml中为这些TextViews创建了样式。问题是当我在代码隐藏中动态创建文本视图并应用样式时,没有应用边距。样式中的所有其他值实际上都有效。

我正在VS 2019中工作,项目是Xamarin Android本机应用程序(不是表格)。 当我使用TextViews手动填充LinearyLayout并应用样式正确运行时,将应用边距。仅当在后面的代码中创建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 :(得分:0)

请记住,android:layout_*属性是LayoutParams。它们是父级的参数,并影响父级如何在该视图上执行布局。由于不知道TextView将在创建哪个父对象时,将删除布局属性。

由于LayoutParams是特定于父视图类型的,因此一种解决方案是在使用LayoutInflaterlayout_属性对布局进行膨胀时提供正确父类型的实例。布局中的顶层视图将被删除。 (充气机不知道要生成哪种类型的LayoutParams。)