使用 Android SDK,似乎没有任何方法可以在表格行上设置样式。我想做相当于:
<TableRow
style='@style/TableRow_classic' >
在代码中。我想要类似的东西:
TableRow row = new TableRow(this);
row.setStyle(R.style.TableRow_classic);
有谁知道如何找到这个?
使用 Android SDK,似乎没有任何方法可以在表格行上设置样式。我想做相当于:
<TableRow
style='@style/TableRow_classic' >
在代码中。我想要类似的东西:
TableRow row = new TableRow(this);
row.setStyle(R.style.TableRow_classic);
有谁知道如何找到这个?
我发现完成此操作的最佳解决方案是创建一个表示表格行的“部分”布局,并定义样式:
<?xml version="1.0" encoding="utf-8"?>
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
style="@style/tr_withborder" />
然后在你的代码中膨胀它,动态使用:
TableRow tr = (TableRow) getLayoutInflater().inflate(R.layout.partial_table_row, null);
虽然不理想,但它确实对我有用
据我所知,没有 setStyle 方法。您可以遍历并设置每个单独的属性,但这违背了将视图与控制器逻辑分离的目的。坏的。
有没有人想出如何动态分配样式?
我正在尝试自己在代码中设置从我的主题获得的样式属性。
我的原因是我想使用我自己的主题中的样式,但是我的用户界面布局完全是在代码中生成的(使用自定义布局构建器),没有在 XML 中定义任何小部件。所以我不能在我的小部件的 XML 布局中设置样式——没有任何 XML 布局。
我在想我将能够通过使用在我的小部件的代码中设置这种样式
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
在这里(在我看来)似乎
AttributeSet set = null;
因为这是 XML inflater 所提供的。
int[] attrs = R.styleable.MyWidget;
定义我想要查看的属性。
int defStyleAttr = myWidgetStyle;
这是在我的主题中定义的对 MyWidget 样式的引用。这些都是在 res/values 中的 XML 文件中定义的。“myWidgetStyle”遵循 android 开发人员在其代码中使用的名称模式。
defStyleRes = 0;
我希望我不需要考虑这个。
然后获取任何属性,例如背景颜色,
Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default);
a.recycle();
这似乎确实有效 - 无论如何。
看来 android 构建系统很方便地生成了正确的索引以在 a.getColor 中使用,并将其命名为R.styleable.MyWidget_background
. 这个名字不是我起的,所以 Android 一定是使用我的 XML 为我的可样式化 MyWidget 完成的。
我希望人们可以通过在 TypedArray 中搜索所需的属性来查找正确的索引,但这将是低效的,并且 TypedArray 看起来像是一个令人不快的装置来处理。我会用一根很长的棍子戳它!
大学教师