Android 安卓:我如何改变相对主义者的风格?

Android 安卓:我如何改变相对主义者的风格?,android,android-layout,Android,Android Layout,我有一个ListFragment,它在屏幕上生成一个“卡片”列表,如下所示: ListFragment使用RelativeLayout渲染每张卡: <RelativeLayout style="@style/CardDefault"> ... many other elements here </RelativeLayout> ... 这里还有很多其他元素 卡片(上面)的完整XML实际上非常详细,因为卡片中还有许

我有一个ListFragment,它在屏幕上生成一个“卡片”列表,如下所示:

ListFragment使用RelativeLayout渲染每张卡:

    <RelativeLayout
        style="@style/CardDefault">

        ... many other elements here

    </RelativeLayout>

... 这里还有很多其他元素
卡片(上面)的完整XML实际上非常详细,因为卡片中还有许多不在屏幕截图中的项目。我省略了多余的东西,因为它太长了

卡片的样式如下:

<style name="Card">
    <item name="android:background">@drawable/card</item>
    <item name="android:textColor">@color/card_text_default</item> 
    <item name="android:layout_height">match_parent</item>
    <item name="android:layout_width">match_parent</item>
    <item name="android:padding">16dp</item>
</style>

@可提款/信用卡
@颜色/卡片\u文本\u默认值
匹配父项
匹配父项
16dp
卡片的默认颜色是蓝色,如我上面链接的屏幕截图所示。一旦一张卡片完成,它就会得到绿色样式——上面屏幕截图中的底部卡片

我想简单地将蓝色样式(如上所示)替换为绿色样式。样式切换将在视图首次加载时发生-用户在查看此屏幕时不会发生这种情况

我一直在尝试不同的方法来实现这一点,但似乎不知道最佳实践是什么

仅仅为了引用不同的样式属性而使用完全不同的布局xml文件似乎是浪费。特别是,当我的布局xml文件非常冗长时,正如我所提到的

对我来说,改变这件相对主义服装风格的最好方法是什么

编辑-01/27

我对安卓系统有了更多的了解,也有了更多的细节。我想做一些类似以下代码显示的事情-if块中的注释是伪代码:

private class PrescriptionCardAdapter extends ArrayAdapter<Prescription> {
        public PrescriptionCardAdapter(List<Prescription> prescriptions) {
            super(getActivity(), R.layout.activity_fragment, prescriptions);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            if (null == convertView) {
                if (cardState == "complete") {
                    // apply the COMPLETE theme or style to this specific view
                    convertView = getActivity().getLayoutInflater().inflate(R.layout.prescription_card, null);
                }
                else if (cardState == "overdue") {
                    // apply the OVERDUE theme or style to this specific view
                    convertView = getActivity().getLayoutInflater().inflate(R.layout.prescription_card, null);
                }
                else {
                    // apply the DEFAULT theme or style to this specific view
                    convertView = getActivity().getLayoutInflater().inflate(R.layout.prescription_card, null);
                }

            }

            return convertView;
        }
    }
私有类PrescriptionCardAdapter扩展了ArrayAdapter{
公共处方卡适配器(列出处方){
super(getActivity(),R.layout.activity_片段,处方);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
if(null==convertView){
如果(cardState==“完成”){
//将完整的主题或样式应用于此特定视图
convertView=getActivity().GetLayoutFlater().充气(R.layout.prescription\U卡,空);
}
否则如果(cardState==“过期”){
//将过期主题或样式应用于此特定视图
convertView=getActivity().GetLayoutFlater().充气(R.layout.prescription\U卡,空);
}
否则{
//将默认主题或样式应用于此特定视图
convertView=getActivity().GetLayoutFlater().充气(R.layout.prescription\U卡,空);
}
}
返回视图;
}
}
当视图膨胀时,有没有一种方法可以将主题或样式应用于视图?格雷格,我能用上面代码中的属性集做点什么吗


谢谢

我认为你应该重新定义你的观点:
“没有setStyle()方法,因为你不能在视图初始化后更改样式。”
|你应该搜索动态更改文本颜色和背景,而不是视图的样式。样式是基于
视图(上下文,属性集)在构造函数中绑定的
视图(Context,AttributeSet,int-defAttr)
属性是从XML中解析出来的,在构造器完成后,所有XML数据都被释放了,谢谢链接。很高兴你把这个链接作为资源共享,以防这是我实现的最佳方式。格雷格,我认为你提到的可能是一个很好的选择。我不需要在运行时更改样式,而是在屏幕第一次呈现时更改样式。你有这种技术的其他例子吗?谢谢。谢谢大家的评论。我更新了我原来的帖子,上面有更多的信息。格雷格,如果你还在那里,我想知道我是否可以使用你在我的更新中包含的代码中提到的AttributeSet技术?谢谢你的帮助。