代码之家  ›  专栏  ›  技术社区  ›  stevedbrown

在Android的TableRow上设置样式

  •  7
  • stevedbrown  · 技术社区  · 15 年前

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

    <TableRow
        style='@style/TableRow_classic' >
    

    在密码里。我想要一些像:

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

    有人知道怎么找到这个吗?

    3 回复  |  直到 15 年前
        1
  •  13
  •   Jim Geurts    13 年前

    我找到的最佳解决方案是创建表示表行的“部分”布局,并定义样式:

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

    虽然不理想,但对我来说确实有效

        2
  •  3
  •   JB JB    15 年前

    据我所知,没有setStyle方法。您可以遍历并设置每个单独的属性,但这会破坏将视图与控制器逻辑分离的目的。很糟糕。

    有人知道如何动态分配样式吗?

        3
  •  1
  •   pcans    11 年前

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

    我的原因是我想使用来自我自己主题的样式,但是我的用户界面布局完全是在代码中生成的(使用自定义布局生成器),没有用XML定义任何小部件。因此,我不能在我的小部件的XML布局中设置样式没有任何XML布局。

    我想我可以通过使用

    TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
    

    在我看来

    1. AttributeSet set = null; 因为这正是XML膨胀器所提供的。

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

    3. int defStyleAttr = myWidgetStyle; 这是在我的主题中定义的对MyWidget样式的引用。它们都是在res/values中的XML文件中定义的。 myWidgetStyle遵循android开发人员在代码中使用的名称模式。

    4. 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看起来是一个令人不快的处理装置。我会用一根很长的棍子戳它!