Android 如何在应用程序中高效地实现多个主题?

Android 如何在应用程序中高效地实现多个主题?,android,android-theme,Android,Android Theme,我正在开发一个android应用程序,我想在其中支持多个主题。 每个主题将有不同的颜色组合。 如何用最少的编码实现这一点 在选择器的帮助下,有没有办法实现这一点 例如,假设其中一个活动显示动态项目列表。因此,我不能在每个列表项中单独提及主题&在列表视图中提及主题&在背景中提及主题,而只能在一个位置提及主题,并且所有元素自动选择适当的背景颜色等吗 希望我的问题清楚 谢谢您可以参考此示例 它处理按钮,但所有UI元素的概念都是相同的 您可以在运行时使用Activity.setTheme方法设置主题。

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

选择器的帮助下,有没有办法实现这一点

例如,假设其中一个活动显示动态项目列表。因此,我不能在每个列表项中单独提及主题&在列表视图中提及主题&在背景中提及主题,而只能在一个位置提及主题,并且所有元素自动选择适当的背景颜色等吗

希望我的问题清楚


谢谢

您可以参考此示例

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


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

您可以参考此示例

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


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

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

如果您为不同的客户提供了相同的应用程序,这些客户希望定制应用程序的外观,但功能相同,则需要此场景

[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>
TRACE;皮肤默认值
此外,对于所有特定于皮肤的文件,请执行此操作,使其不包含在应用程序中,以最小化应用程序大小:

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

设计师

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

如果您为不同的客户提供了相同的应用程序,这些客户希望定制应用程序的外观,但功能相同,则需要此场景

[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>
TRACE;皮肤默认值
此外,对于所有特定于皮肤的文件,请执行此操作,使其不包含在应用程序中,以最小化应用程序大小:

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

设计师

为什么不在
styles.xml中创建一个父主题,然后创建一些扩展父主题的子主题,并根据需要对它们进行一些更改呢。您可以在不同的活动中分别使用这些主题。您是否允许用户更改主题?为什么不在
style.xml
中创建父主题,然后创建一些子主题扩展父主题,并在其中进行您希望的更改。您可以在不同的活动中分别使用这些主题。您是否允许用户更改主题?