- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的应用程序中有一些具有不同颜色的开关控件,为了更改它们的颜色,我使用了多个自定义可绘制选择器。
随着 AppCompat v21 库的发布,引入了新的 android.support.v7.widget.SwitchCompat 控件。
是否可以在没有客户可绘制选择器但使用 XML 或代码的情况下以编程方式更改 SwitchCompat 的颜色?
最佳答案
首先,您应该看看 appCompat 库文章 there以及您可以设置的不同属性:
colorPrimary:应用的主要品牌颜色。默认情况下,这是应用于操作栏背景的颜色。
colorPrimaryDark:主要品牌颜色的深色变体。默认情况下,这是应用于状态栏(通过 statusBarColor)和导航栏(通过 navigationBarColor)的颜色。
colorAccent:对主要品牌色彩的明亮补充。默认情况下,这是应用于框架控件的颜色(通过 colorControlActivated)。
colorControlNormal:在正常状态下应用于框架控件的颜色。
colorControlActivated:应用于处于激活(例如选中、打开)状态的框架控件的颜色。
colorControlHighlight:应用于框架控件突出显示的颜色(例如波纹、列表选择器)。
colorButtonNormal:在正常状态下应用于框架按钮的颜色。
colorSwitchThumbNormal:在正常状态下应用于框架开关拇指的颜色。 (关掉)
使用之前的属性,您可以为每个 Activity 定义自己的主题:
<style name="Theme.MyActivityTheme" parent="Theme.AppCompat.Light">
<!-- colorPrimary is used for the default action bar background -->
<item name="colorPrimary">@color/my_awesome_color</item>
<!-- colorPrimaryDark is used for the status bar -->
<item name="colorPrimaryDark">@color/my_awesome_darker_color</item>
<!-- colorAccent is used as the default value for colorControlActivated,
which is used to tint widgets -->
<item name="colorAccent">@color/accent</item>
<!-- You can also set colorControlNormal, colorControlActivated
colorControlHighlight, and colorSwitchThumbNormal. -->
</style>
和:
<manifest>
...
<activity
android:name=".MainActivity"
android:theme="@style/Theme.MyActivityTheme">
</activity>
...
</manifest>
由于 appcompat 中的小部件着色通过拦截任何布局膨胀并在其位置插入一个特殊的着色感知版本的小部件来工作(参见 Chris Banes post about it),因此您不能将自定义样式应用于布局 xml 的每个开关文件。您必须设置一个自定义 Context 以使用正确的颜色进行着色切换。
--
要为 pre-5.0 执行此操作,您需要创建一个使用自定义属性覆盖全局主题的上下文,然后以编程方式创建您的开关:
ContextThemeWrapper ctw = ContextThemeWrapper(getActivity(), R.style.Color1SwitchStyle);
SwitchCompat sc = new SwitchCompat(ctw)
从 AppCompat v22.1
开始,您可以使用以下 XML
将主题应用于开关小部件:
<RelativeLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
...>
<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:theme="@style/Color1SwitchStyle"/>
您的自定义开关主题:
<style name="Color1SwitchStyle">
<item name="colorControlActivated">@color/my_awesome_color</item>
</style>
--
在 Android 5.0 上,它看起来像是一个新的 View 属性:android:theme
(与 list 中的 Activity 声明相同)。基于另一个 Chris Banes post ,使用后者,您应该能够直接在布局 xml 中的 View 上定义自定义主题:
<android.support.v7.widget.SwitchCompat
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:theme="@style/Color1SwitchStyle"/>
感谢 vine'th,我通过一个指向 SO 答案的链接完成了我的答案,该链接解释了如何在 Switch 关闭时指定轨道的前景,它是 there .
关于android - 如何从 AppCompat 库中更改 SwitchCompat 的颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26714864/
我正在尝试使用 SwitchCompat,它显示在 Android Studio 的设计 View 中,但在我的 Galaxy S4(运行 5.0.1)上,它没有显示。这是相关代码: Activity
我的问题可能最好通过视觉方式提出——我想要一个 SwitchCompat切换到他们在 Android 设置应用中的样子: 这是关闭的: 这是在: 但出于某种原因,我的 SwitchCompat 开关在
我需要更改 SwitchCompat 的轨道颜色。我试过了 this ,但它对我没有用。这是我的 XML 文件的代码 这是我的 style.xml 文件 @color/red @c
使用列表和 map 数据演示开发应用程序。要在演示文稿之间切换,应使用带有图像的自定义切换,如下所示: 如何创建这样的自定义switchcompat? 最佳答案 这是一个很好的例子: ORIGINAL
昨天我切换到 Android Studio 2.2 Preview 1,我注意到所有 SwitchCompat View 周围有一些额外的线条,它们看起来变形了。 它的样式只包含宽度/高度参数和垂直中
我正在使用 android.support.v7.widget.SwitchCompat 并且遇到以下问题 我的包含 colorControlActivated 的样式不适用 使用 Android 命
我想在代码中打开或关闭 SwitchCompat 小部件。我的意思是当用户将 SwitchCompat 从 On 更改为 Off 或其他时。我想在代码中做到这一点。我该怎么做? SwitchCompa
我想为 SwitchCompat 应用自定义样式。更改打开和关闭状态的绘图和文本。我怎样才能做到这一点?我找不到任何关于如何做到这一点的例子。我在我的 styles.xml 中尝试了以下内容,但显然我
我正在尝试在我的 fragment 中使用 switchcompat。最小支持的 API 为 14,最大为 21。我正在尝试应用 Material View 来切换所有 pre lollipop an
目前我的 SwitchCompat看起来像下面的图像(顶部),但是我需要在关闭状态下有可见文本。 我将如何实现这一目标? 最佳答案 关于android - 显示以设置在 SwitchCompat
我在 RecyclerView 适配器中仅使用一个 SwitchCompat。我需要在 RecyclerView 上单击的项目的位置,并且当我使用 TextView 而不是 SwitchCompat
我在 ActionBar 中有一个 SwitchCompat 小部件。 当按下后退按钮并“重新打开”应用程序时,SwitchCompat 会丢失状态,从打开变为关闭。 我正在实现前台,但这并不能阻止
这是未经检查的样子: 并检查: checked 明显不符合设计,那么当它被选中时,我怎样才能让它看起来像未选中? 最佳答案 您可以为两个语句使用相同的颜色: switchButton.setO
在 Android 中,是否可以垂直对齐 SwitchCompat ,即将文本放在开关上方而不是开关左侧? 最佳答案 你在找这样的东西吗? 试试这个 关于android - A
我在将 Android.Support.V7.Widget.SwitchCompat 绑定(bind)到我的 View 模型时遇到了麻烦(Mvvmcross 是我正在使用的框架)我做了与在另一个对象上
我正在尝试以编程方式添加 android.support.v7.widget.SwitchCompat,但出现此错误: java.lang.NullPointerException: Attempt
我想在 Android Studio 中使用 SwitchCompat,我把它放在 build.gradle 中: compile 'com.android.support:appcompat-v7:
这是我的代码,对我不起作用。我使用来自 this 的代码示例。 XML- 和代码: mVisibilitySwitchCompat = (SwitchCompat) findViewById(R.i
我想减少 Switch 的宽度。当前解决方案在How to change the size of a Switch Widget和 How to change Width of Android's S
我在顶部有一个主要的服务开/关开关。我希望这个开关大而显眼。 如果我将 textOn 属性更改得更长一些,它在某种程度上是在做我想做的事情,但我希望这种情况发生在更短的 textOn 字符串长度上。
我是一名优秀的程序员,十分优秀!