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