在Android上的TableRow上设置样式

时间:2009-07-17 18:08:33

标签: java android android-styles

使用Android SDK,似乎没有任何方法可以在表格行上设置样式。我想做相同的事情:

<TableRow
    style='@style/TableRow_classic' >
代码中的

。我想要像:

TableRow row = new TableRow(this);
row.setStyle(R.style.TableRow_classic);

有谁知道如何找到这个?

3 个答案:

答案 0 :(得分:12)

我发现实现此目的的最佳解决方案是创建一个表示表格行的“部分”布局,并定义了一种样式:

<?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);

虽然不理想,但它对我有用

答案 1 :(得分:3)

据我所知,没有setStyle方法。您可以通过并设置每个单独的属性,但这会将View与控制器逻辑分开。坏。

有没有人想出如何动态分配样式?

答案 2 :(得分:1)

我正在尝试在代码中设置从我的主题获取的样式属性。

我的理由是我想使用我自己的主题中的样式,但我的用户界面布局完全是在代码中生成的(使用自定义布局构建器),而不是在XML中定义任何小部件。所以我无法在我的小部件的XML布局中设置样式 - 没有任何XML布局。

我想我可以使用

在我的小部件代码中设置此样式
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)

这对我来说似乎是

  1. AttributeSet set = null;因为这是XML inflater提供的内容。

  2. int[] attrs = R.styleable.MyWidget;定义了我想要查看的属性。

  3. int defStyleAttr = myWidgetStyle;这是我的主题中定义的引用,用于MyWidget的样式。这些都是在res / values的XML文件中定义的。 “myWidgetStyle”遵循Android开发人员在其代码中使用的名称模式。

  4. defStyleRes = 0;我希望我不需要考虑这一点。

  5. 然后获取任何属性,例如背景颜色

    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看起来像是一个令人不快的处理方法。我会用很长的棒来戳它!