gpt4 book ai didi

android - 如何一次性否定 View 的颜色?

转载 作者:行者123 更新时间:2023-11-29 01:31:21 26 4
gpt4 key购买 nike

在问这个问题之前,我已经对此进行了一些研究,并且还在SO上寻找了类似的问题,但似乎都没有回答它。

我计划在我的 Android 应用程序中提供视觉辅助功能,用户可以一次性取消 UI 的颜色(比如说一个简单的按钮来取消颜色)。 p>

不过也有少数异常(exception)。很少有 View (比如操作栏)的颜色最好固定,即使用户选择否定颜色,以提高可读性。

我能想到几个选项来实现相同的目的:

  1. 维护每个布局 xml 的两份副本 - 一份包含正常彩色 View ,一份包含否定彩色 View 。现在,每当用户选择否定颜色时,只需在 java 中加载相应的 xml。
  2. 在 color.xml 中维护每个 View 颜色的两个副本。在两个不同的主题下定义它们。现在根据用户需要设置相应的主题。

挑战:
可扩展性:鉴于该应用已经使用了数百个 View 、数百个 XML,并且它将在未来的更新中使用越来越多的 View ,我该如何处理?

问题:
1. 考虑到可扩展性,哪个选项更好。
2.有没有其他方法可以做到这一点?
3. 是否有任何 android API 可以提供 View 的否定颜色?

最佳答案

在我看来,最好的方法是在您的应用中维护一个正常主题和一个否定主题,然后根据用户设置,在运行时更改主题。

此方法有一个问题,即您必须在 Activity 中的 setContentView 之前 setTheme。这意味着您无法在用户单击按钮后立即反射(reflect)更改。话虽这么说,但在我看来,这是最好的解决方案,因为它可以很好地扩展,并且您可能拥有一个 BaseActivity,您的所有 Activity 都继承自该 BaseActivity,可以通过检查来设置您的主题。

setTheme(userBlackTheme? android.R.style.Theme_Dark : android.R.style.Theme_Light);
super.onCreate(savedInstanceState); //IMPORTANT: setTheme is before the super call!!!
setContentView(R.layout.main);

如果您在屏幕上有一个按钮并且想要这样做,那么您应该能够换掉 View 上的所有样式属性并将它们替换为深色属性。这意味着,虽然您不会更改主题,但您可以将每个 View 的属性更改为深色主题的属性。

然后您将不得不递归循环遍历所有 View ,并根据 View 的类将其属性更改为深色/浅色。

public void recursiveLoopChildren(ViewGroup parent) {
for (int i = parent.getChildCount() - 1; i >= 0; i--) {
final View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
((ViewGroup) child).setBackgroundColor(useDarkTheme? Color.BLACK : Color.WHITE);
recursiveLoopChildren((ViewGroup) child);

// DO SOMETHING WITH VIEWGROUP, AFTER CHILDREN HAS BEEN LOOPED
} else {
if (child instanceof TextView) {
((TextView) child).setTextColor(...);
}
}
}
}

简而言之,您可能想要同时实现这两个选项,选项 1 所有新 Activity 都将使用深色主题,选项 2 当您单击更改主题按钮时,您当前的 Activity 将被更改。或者...当单击更改主题的按钮时,重新加载当前 Activity ,这对用户来说不是那么优雅,也许您可​​以使用深色主题重新加载相同的 Activity 并将其淡入浅色主题之上,然后调用 finish() 在浅色主题上提供了一个很好的过渡,同时简化了你的生活。希望这会有所帮助。

关于android - 如何一次性否定 View 的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31035815/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com