我正在学习有关创建自定义按钮的教程.如果我直接将该样式应用于该按钮它可以工作,但如果我使用android:buttonStyle它将样式应用于主题则不起作用.
示例 - 以下是应用了按钮样式的样式xml:values/styles.xml
<resources>
<style name="MyTheme" parent="android:Theme.Light">
<!-- the button gets styled but is no longer clickable
if i do it like this -->
<item name="android:buttonStyle">@style/ButtonText</item>
</style>
<style name="ButtonText">
<item name="android:layout_width">fill_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:textColor">#ffffff</item>
<item name="android:background">@drawable/ruddy_orange_button</item>
</style>
</resources>
Run Code Online (Sandbox Code Playgroud)
绘制/ ruddy_orange_button.xml:
<item android:state_pressed="true">
<shape>
<solid android:color="#70c656" />
<stroke android:width="1dp" android:color="#53933f" />
<corners android:radius="3dp" />
<padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
</shape>
</item>
<item>
<shape>
<gradient android:angle="270" android:endColor="#fd4d4d" android:startColor="#f24b4b" />
<stroke android:width="1dp" android:color="#f04a4a" />
<corners android:radius="4dp" …Run Code Online (Sandbox Code Playgroud) 我目前正致力于通过actionbarsherlock使我的应用程序与3.0之前的设备兼容.我的应用程序有一个自定义主题,覆盖Holo.light将蓝色变为橙色.
我想将操作栏下方出现的蓝线更改为橙色.通过官方操作栏,我通过覆盖来管理它
<item name="android:background">@drawable/ad_tab_unselected_holo</item>
Run Code Online (Sandbox Code Playgroud)
不幸的是,这似乎没有在actionbarsherlock 4中起作用.
我知道我可以为不同的API级别添加不同的XML,例如,为值-v21和values-v19设置不同的样式.我想要了解的是构建系统如何实际使用这些不同的值?因此,例如,如果我在所有API中都有大部分样式,并且一个样式中的一个项目在21和其他样式之间发生变化,那么我是否:
1)将整个styles.xml复制到v21中,并更改我需要更改的一个值
2)只在v21下添加一个更改为styles.xml的样式
3)只添加那个在21下改变的一个样式的项目
令人困惑,我找不到任何文档,如何构建的进程处理合并样式.
我有一个非常简单的textview:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/app_name"
android:textSize="20sp"
android:textColor="@style/basic_text_color"
android:layout_gravity="center"
android:id="@+id/toolbar_title" />
Run Code Online (Sandbox Code Playgroud)
哪个@ style/basic_text_color是我想在应用程序中重复使用很多时间的颜色,所以我创建了一个app_colors.xmlunder values文件夹:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Text colors style-->
<style name="basic_text_color" parent="@android:style/TextAppearance">
<item name="android:textColor">#ff932e</item>
</style>
<!-- some other color styles-->
</resources>
Run Code Online (Sandbox Code Playgroud)
应用程序编译成功,但随后执行时它将挂起并在LogCat中提示跟随错误:
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aaa/com.example.aaa.activity.MainActivity}: android.view.InflateException: Binary XML file line #17: Error inflating class TextView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2125)
at android.app.ActivityThread.access$600(ActivityThread.java:140)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1227)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at …Run Code Online (Sandbox Code Playgroud) 一般来说,为了改变任何UI元素的外观,您是如何找到要覆盖的主题属性的?
目前,我依赖于遍历框架源文件:values.xml中的主题定义(通常是支持库变体),attrs.xml中的属性定义以及R.styleable类文档.
但这完全是命中注定.这不仅耗费时间,而且有时我会完全错过,例如我一直在努力寻找如何在DatePickerDialog的OK和Cancel按钮中更改文本样式.您可以随意使用它作为示例,但如果您这样做,请概述您的发现过程.我正在寻找的答案是如何发现任何UI元素的应用样式,
还是没有确定的方法可以找到答案?你只需要知道吗?
关于 Android 主题和样式的问题和文章数以百万计——我已经阅读了其中的一半,但我仍然会发疯。
我想要的 - 并且来自具有可爱,友好的旧 CSS 样式表的 Web 应用程序开发背景,我认为这很容易 - 就是为我的应用程序创建一个主题,并在该主题中指定我的工具栏的颜色(我是为每个活动指定它们,我认为这是阅读官方文档后正确的做法)。
所以,在我的styles.xml文件中,我有:
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:toolbarStyle">@style/MyToolbar</item>
</style>
<style name="MyToolbar" parent="Base.Widget.AppCompat.Toolbar">
<item name="android:textColor">#ffffff</item>
<item name="android:textColorPrimary">#ffffff</item>
<item name="android:elevation">4dp</item>
<item name="android:background">@color/colorPrimary</item>
</style>
Run Code Online (Sandbox Code Playgroud)
在我看来,我在这里为我的工具栏创建了一个样式,然后在我的主题中引用了该样式。然后我将我的主题设置为应用程序主题AndroidManifest.xml:
android:theme="@style/MyTheme"
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,这是有效的。我的主题中引用了其他样式,为了简单起见,我从代码中省略了这些样式,它们可以正常工作 - 我的按钮、文本视图等按照我创建的样式设置样式。
但讨厌的工具栏不是。我试过直接在工具栏 xml 中引用我的样式(即使我不明白为什么我需要在主题中指定它):
<android.support.v7.widget.Toolbar
android:id="@+id/main_activity_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
style="@style/MyToolbar">
</android.support.v7.widget.Toolbar>
Run Code Online (Sandbox Code Playgroud)
令人沮丧的是,这确实导致工具栏的背景颜色与我想要的一样,但文本仍然是黑色的,即使我试图将其设置为白色。
我是否误解了主题引用样式然后应用于活动或整个应用程序的方式?工具栏有什么独特之处吗?我花了更长的时间来尝试解决这个问题,而不是从头开始编写整个应用程序的其余部分,这是我的第一个 Android 应用程序!
更新: 好的,所以我已经确定,虽然我的工具栏的背景颜色需要在应用于工具栏的样式中设置,以防止该背景颜色传播到所有子视图,但需要在主题中指定所需的文本颜色因为工具栏中显示的文本是子视图(即使我在活动的 xml 中看不到它)。所以,这有效:
样式.xml:
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item …Run Code Online (Sandbox Code Playgroud) 声明一个样式,当我定义一个 item 时android:backgroundTint,我收到一个警告,它从 API 21 开始可用,而我指定的最小 API 较低(API 17)。另一方面,当我用 simple 替换它时backgroundTint,警告消失了。有谁知道这是为什么?
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:backgroundTint">#0F0</item>
</style>
Run Code Online (Sandbox Code Playgroud)
除此之外,如果我android:backgroundTint用于单个组件,例如按钮,则无论我的项目的最低 SDK 是什么,我都不会收到警告或错误。这有点令人费解。
我最近使用了https://material.io/tools/color/上的材料调色板生成器来生成调色板。
如您所见,该工具是 Material.io 上的官方工具。它生成了几种颜色 - 主要颜色和次要颜色,包括每种颜色的两种变体。这导致我在我的colors.xml文件中创建了这样的东西。
<!-- Color palette -->
<!-- ... -->
<!-- Colors by usage -->
<color name="colorPrimary">@color/black</color>
<color name="colorPrimaryDark">@color/blackDark</color>
<color name="colorPrimaryLight">@color/gray</color>
<color name="colorSecondary">@color/red</color>
<color name="colorSecondaryDark">@color/maroon</color>
<color name="colorSecondaryLight">@color/redLight</color>
<color name="colorTextOnPrimary">@color/white</color>
<color name="colorTextOnSecondary">@color/white</color>
Run Code Online (Sandbox Code Playgroud)
但是,如何在我的主题中应用这些颜色?Android 支持材料 (AppCompat) 主题只需要/允许三种颜色 - 主要、次要和重音。我应该使用另一个主题来应用这些属性吗?或者我只是在这里做错了什么?
我想避免在这里创建一个全新的主题,并且必须为我可能想要使用的每个组件手动设置颜色。
android android-theme android-styles material-design android-palette
我们如何使用样式自定义android警报对话框的字体
我找到了很多使用
setTypeFace()方法的解决方案。但我想使用样式自定义整个应用程序警报对话框。
我想更改标题、消息、按钮字体。
我能够使用以下代码更改消息字体。
我的警报对话框样式声明
<style name="MyAlertDialougeTheme" parent="@android:style/Theme.Material.Light.Dialog.Alert">
<item name="android:textAppearanceSmall">@style/MyTextAppearance</item>
<item name="android:textAppearanceLarge">@style/MyTextAppearance</item>
<item name="android:textAppearanceMedium">@style/MyTextAppearance</item>
</style>
Run Code Online (Sandbox Code Playgroud)
显示警报对话框的 Java 代码
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this,
R.style.MyAlertDialougeTheme);
builder.setTitle("Warning")
.setMessage("My message here")
.setPositiveButton("yes", null)
.setNegativeButton("no", null)
.show();
Run Code Online (Sandbox Code Playgroud)
在屏幕下方查看
请帮助我使用样式更改标题和按钮字体,我还想自定义负按钮和正按钮的字体颜色。
提前感谢您的时间和帮助!!
我们将我们的应用程序定位在 api 28 并在状态栏下绘制内容。为此,我们使用以下标志和样式:
window.addFlags(FLAG_LAYOUT_NO_LIMITS)
Run Code Online (Sandbox Code Playgroud)
<item name="windowNoTitle">true</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
Run Code Online (Sandbox Code Playgroud)
Android Pie 上一切正常(状态栏下方和导航栏上方的内容布局)。在android Q中,导航栏是半透明的并显示在应用程序内容之上
android navigationbar android-layout android-styles android-10.0