Android:如何更改RelativeLayout的样式?

时间:2013-12-20 22:00:50

标签: android android-layout

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

app screen mockup

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>

卡片的默认颜色为蓝色,显示在我上面链接的屏幕截图的顶部。一旦卡完成,它将获得绿色样式 - 上面屏幕截图中的底部卡片。

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

我一直在玩不同的方法来做到这一点,但似乎无法弄清楚最佳做法是什么。

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

对我来说,改变这种相对布局风格的最佳方法是什么?

编辑 - 01/27

我已经学到了更多关于Android的知识,并且有更多细节。我想做类似以下代码的事情 - 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;
        }
    }

有没有一种方法可以将我的观点应用主题或风格,因为它们会让它们膨胀? Greg,我可以在上面的代码中使用AttributeSets做些什么吗?

谢谢!

0 个答案:

没有答案