android - 是否可以在不使用单个“样式”属性的情况下设置整个应用程序的样式?
问题描述
我的问题可能很愚蠢,但是否可以通过 theme.xml 设置整个应用程序的样式而不在布局中使用单个样式属性?
例如,我有这个 imageView 并通过 app:style 设置样式:
<ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end|center_vertical"
android:src="@drawable/ic_bottom_sheet_edit"
app:style="@style/imageViewStyle"/>
是否可以设置样式?:
<style name="MyTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<item name="imageViewStyle">@style/MyTheme.ImageView</item>
可以对所有组件执行此操作吗?如何找出我必须设置的正确项目名称(在上述情况下:imageViewStyle)?我知道这至少对于 TabLayout 和 Toolbar 是可能的,但是其他组件呢?
解决方案
不适合所有人。在应用程序级别的主题中,您可以设置属性,例如
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">true</item>
<item name="android:textColorPrimary">@color/textColorPrimary</item>
<item name="android:textColor">@color/white</item>
如果您想要通过应用程序主题无法实现的特定视图的样式,您可以使用自定义视图。
class AppImageView @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyle: Int = 0,
) : LinearLayout(context, attrs, defStyle) {
init{
//inflate layout here with desired style
//also good practice to have custom attribute set in values/attrs.xml
}
}
最后,您可以在布局中使用此视图,就像使用 android 默认视图一样。
<AppImageView>
width
height
..
</AppImageView>
推荐阅读
- ssl - 如何为 Envoy 代理自动加载新的 TLS 证书?
- amazon-web-services - 我可以通过给定的 AWS 集成将 SNS(或 SQS)消息持久保存到 S3 吗?
- c++ - 如何使用 nvlink GPU 创建 TensorFlow 会话
- python - json.loads() 函数导致未终止的字符串异常
- c# - 如何从 CSV 文件创建二维数组
- angular - 添加 span 元素以显示错误消息
- sqlite - 问:SQLite 查询数据中的孤岛(即某个值已达到某个阈值的连续行)
- python - Pandas:基于标题子字符串的部分枢轴
- javascript - 在 webpack (SSR) 捆绑的 express 中找不到静态文件夹
- python - 使用递归构建各种树