问题标签 [android-attributes]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - 使用主题更改 Android 样式
我有几个不同的应用程序Activities
。不同的活动有不同样式的按钮、文本等...我已经将所有组件设置为根据它们的位置/活动具有不同的样式。(例如style="@style/MainMenuActionBarTitle
,或style="@style/MainMenuActionBarTagLine
)。这些样式设置background
( Drawable
, MipMap
, or Color
), textColor
, 等等...
该应用程序将提供一些主题包,它们可以在整个应用程序中更改这些不同组件的颜色,我希望有一种方法可以Styles
使用相同的名称,但基于Theme
应用程序的不同值。这样我就可以在加载到用户选择的任何主题Theme
时更改。Activity
这里有一些关于如何使用主题更改标准小部件外观和感觉的好信息,但这会改变标准非样式小部件的外观。
有没有办法使用主题来实现这一点,或者这完全是错误的方向?有更好/更简单的路线吗?
编辑:在做了更多的研究和更多的摆弄之后,我意识到我想要做的离我如何做到这一点并不遥远。我想要做的是在Styles
设置.Theme
Activity
android - 按钮的透明背景
我需要为我的按钮设置透明背景,但只有背景,而不是所有按钮。我试过了:
和背景更改为透明,但我有一个错误:
android - android.view.InflateException 使用 selectableItemBackground 时
膨胀我的布局时,我得到了这个异常:
日志中没有“Caused by”,但是我添加了代码来捕获异常并调用getCause()
,直到它返回null,这是事件的顺序:
0x7f020096 是selectable_list_background
(见下文),它引用的 TypedValue 是?selectableItemBackground
.
我将例外范围缩小到我对?selectableItemBackground
. 更具体地说,我使用的是 CardView:
这是相关部分drawable/selectable_list_background
:
此活动使用我自己的主题,其父主题是Theme.AppCompat.Light.NoActionBar
.
这段代码曾经可以工作,但几个月后我才挖出这段代码,现在它崩溃并出现异常。我的猜测是,这与将支持库升级到 23.0.1 并将目标 SDK 升级到 23 有关,但我还没有切换回 22 来验证这一点。
如果我删除一行引用,一切正常?selectableItemBackground
。我也试过?attr/selectableItemBackground
and ?android:attr/selectableItemBackground
,但得到了相同的结果。(后者让我相信支持库可能不是问题)。
编辑:
我在调试器中查看了它,我怀疑它是在android.content.res.Resources
里面的这段代码loadDrawable()
:
注意这个函数带了一个主题,但是在调用的时候没有传入loadDrawableForCookie()
,这个方法最终触发了第一个异常:
这段代码对 Android 6.0 来说似乎是新的——5.0 的代码有很大的不同,但是在加载 drawable 时会传入主题。并且主题是必要的 AFAICT - 有问题的属性是 的一部分AppCompat
,因此需要活动的主题来解决它。
不过,这似乎是一个明显的错误,所以我不相信我在这里走在正确的轨道上。有任何想法吗?
android - 通过 PagerAdapter 将 AttributeSet 传递给自定义 ViewPager 的孩子
我的问题 - ViewPager 视图的子视图无法从 AttributeSet 获取属性。我制作了包含 ViewPager 的自定义 ViewGroup:
在适配器中,我保存 AttributeSet 对象并在创建步骤将其传递给 ViewPager 视图的子视图:
属性示例(我尝试将 declare-styleable 的名称设置为“CustomCalendarView” - 没有任何变化)
xml 中使用自定义视图的示例:
在子视图中,我尝试获取该属性:
因此,TypedArray 不是 null,而是在获取维度时返回传递的默认值。如果我直接在 xml 中设置 MonthView 并设置属性 - 它可以工作,但不能在 PagerAdapter 中。如何修复它并使视图可见属性?
android - 如何设置 PreferenceFragmentCompat 重音颜色?
我想覆盖 v14 PreferenceFragmentCompat 使用的强调颜色。
我正在为我的 Android 应用程序的外框使用粉红色的强调色。这在许多情况下都会产生问题,因为它会导致标准控件使用与红色足够接近的强调色,以至于效果令人不安。尽管如此,我喜欢在框架上有一个粉红色的 FAB 和按钮控件的效果。
对于儿童活动,我使用带有标准青色强调色的它们。但是,我在主要活动的抽屉中有一个 PreferenceFragment 兼容,我无法弄清楚如何覆盖主要活动的强调色。
我尝试过的事情(都没有工作):
在接收 PreferenceFragmentCompat 的片段的框架上设置主题(不起作用):
其中 AppTheme.TealAccentColor 样式提供了明确的青色 acccentColor。
在首选项主题中设置强调颜色(不起作用):
向preference-v14 的PreferenceThemeOverlay 添加强调色(不起作用):
无论我做什么,PreferenceFragmentCompat 似乎都从 Activity 的主题中取了粉红色的强调色。
我确信这与 Activity 的主题和 Fragment 的主题之间的脱节有关。但是片段没有 xml 元素,因为 PreferenceFragmentCompat 提供了自己的布局。
也许有一种方法可以通过扩展 PreferenceFragmentCompat 的类中的覆盖以编程方式完成,但如果有,我无法想象它会是什么。我能想到的大部分攻击点要么访问内部创建的布局,要么访问创建后的布局,这为时已晚。
图片可能会有所帮助:
java - 从应用程序类获取主题属性
我一直在使用一种方法从当前获取颜色属性Context
:
它工作得很好,但是当我尝试在我的类中使用它时,Application
它会返回0
. 在大多数情况下,我会这样调用该方法:
这将返回我在清单中"colorAccent"
设置的内容。但是在课堂上我不得不打电话而不是. 因此,我也将方法的其他实例之一切换为to并返回。我也尝试过,结果相同。themes.xml
AppTheme
Application
getApplicationContext()
this
Activity
getApplicationContext()
0
getApplication()
getBaseContext()
我想知道是否有办法从Application
课堂上的应用程序主题中获取颜色。或者如果没有,为什么getApplicationContext().getTheme()
似乎没有返回应用程序主题。
android - 在Android中膨胀类按钮时出错
我有一个最小 sdk 16 到 23 的应用程序。我想尽可能地使用 Material Design。它还必须是全屏应用程序。包括 AppCompat 支持库。现在我有一些按钮的登录活动:
样式如下(values/styles.xml):
在值/属性中:
属性font_medium的定义如此处所述。我不明白的行为是,当登录活动被打开时,一切正常,没有例外。但是,当我从带有片段的登录活动中打开另一个活动并且片段有一个具有这种样式的按钮时,我得到一个异常,说“错误膨胀类按钮”。当我从 ButtonDefault 样式中删除textSize属性时,一切正常。为什么它在某处有效而在某处无效?自定义属性有问题吗?
我尝试使用该样式创建 values-v21/styles.xml 但没有效果。
您能否解释一下以下父样式定义之间的区别?我要迷路了。
谢谢你。
编辑 1 - 例外:
java - 具有 attrs 值的 setImageResource()
我正在尝试使用我ImageView
定义的自定义属性将图像放入我的 ,我正在这样做:
属性:
ImageView 属性:
比我的View
:
并将图像设置为ImageView
:
但什么也没有出现,我也尝试过:
和:
更新:
我已经尝试过解析属性ta.getInt(..)
并且它的工作正常!
我不明白为什么,提前谢谢!
android - 上下文/覆盖主题颜色
我面临一个问题,我尝试了几种方法来面对它,仍然不成功。
我的应用程序正在使用多个主题,例如:万圣节、圣诞节等,并且我在小部件上使用了一些颜色属性,例如 TabLayout 背景、文本颜色等,以对应用程序进行上下文化。
问题是:如何根据主题上下文使用具有不同值的相同颜色属性?
所以,基本上这是声明颜色的正常方法:
但是,主题和颜色是不可变的,所以我想,也许我可以在每个主题中覆盖这些颜色,例如:
=> 不成功
其他线索,将这些颜色声明为属性:
并像这样在我的 XML 中使用主题:“ ?attr/mapLoadingIndicatorColor
”。但此功能仅在Lollipop版本之后才允许使用,并导致之前的崩溃。
我已经阅读了很多关于主题定制、颜色覆盖的内容,但从未找到关于这种情况的明确解决方案。
不管怎么说,还是要谢谢你。
android - 为什么这个自定义视图属性会被忽略?
我正在尝试使用Data Binding Library为任何视图定义一个属性,如此 Android Developers post中所述。
为此,帖子说首先需要一个带有封闭<layout>
标签的布局:
此时,布局引起了ClassNotFoundException
when inflated。我发现摆脱它的唯一方法是添加一个<data></data>
节点,即使 Android 开发人员帖子中没有它:
(帖子没有提到它,但我必须按照指南中的建议启用dataBinding
,然后才能构建。)build.gradle
该帖子然后解释了如何编写BindingAdapter
处理属性的方法:
但是,该bindAttribute
方法永远不会被调用。我确实在我的构建文件夹中看到了为布局生成的代码,但没有其他任何反应。