如何在app中有效地实现多个主题?

时间:2013-12-14 18:14:02

标签: android android-theme

我正在开发一个Android应用程序,我希望在其中支持多个主题。 每个主题都有不同的颜色组合。 如何以最少的编码实现这一点。

有没有办法在selector

的帮助下实现这一点

例如假设其中一个活动显示动态项目列表。因此,不要在每个列表项中单独提及主题&他们在列表视图和&在背景中,我不能只在一个地方提及主题,所有元素自动选择合适的背景颜色等吗?

希望我的问题很明确。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以参考此示例。

How do I apply a style to all buttons of an Android application

它处理按钮,但所有UI元素的概念都相同。

您可以使用Activity.setTheme方法在运行时设置主题。

答案 1 :(得分:0)

我想出了如何在应用中拥有多个皮肤(主题)。您不仅可以使用此方法更改颜色,还可以完成布局。这种方法的另一个好处是你不会在应用程序中发送所有皮肤(所有文件),而只发布你在构建时选择的皮肤。

如果您为需要自定义应用外观但功能相同的不同客户提供相同的应用,则需要此方案。

[Activity(Label = "TEST_SKINOV", MainLauncher = true, Icon = "@drawable/icon")]
public class MainActivity : Activity
{
    protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);

        // Set our view from the "main" layout resource
        #if SKIN_DEFAULT
        SetContentView(Resource.Layout.Main);
        #endif
        #if SKIN_BLUE
        SetContentView(Resource.Layout.MainSkinBlue);
        #endif
    }
}

使用记事本编辑.csproj文件并添加皮肤名称。 搜索" DefineConstants"并为其添加您的皮肤名称,如下所示:

<DefineConstants>TRACE;SKIN_DEFAULT</DefineConstants>

此外,对于所有特定于皮肤的文件,请执行此操作以在应用中不包含它们以最小化应用大小:

<ItemGroup Condition="$(DefineConstants.Contains('SKIN_DEFAULT'))">
<AndroidResource Include="Resources\layout\Main.axml">
  <SubType>Designer</SubType>
</AndroidResource>
</ItemGroup>