标签: android-theme

WebView如何从当前的Android主题继承颜色?

此问题最初发布在谷歌版主上,用于上周举行的AndroidDev办公时间环聊.问题实际上是现场回答,如果你愿意,你可以在这里观看.我在这里发帖,因为他们似乎对它很感兴趣,而且我有更多的空间来详细阐述.

A WebView通常用于显示作者想要的Web内容(如他们在环聊中所述).但我使用a WebView来显示,不仅仅是内容本身,而是格式化文本(主要是粗体,斜体,项目符号列表和文本对齐).这是一个容易得多WebView(换句话说,更容易使用HTML/CSS),而不是用一堆TextViews,并保持这一切完全格式化.

问题是我正在使用这个特定WebView的透明背景AlertDialog.该WebView文本颜色来自加载的内容CSS但重要的是,这种色彩搭配的背景色对比AlertDialog.那是我的问题.

直到Android 2.3,AlertDialog背景总是很暗.如果应用主题是默认的暗色或浅色,无关紧要,AlertDialog仍然是深灰色.这个在香草Android上.但即使在蒙皮的Android(Sense,TouchWiz,MotoBlur等)上,它AlertDialog也一直是暗色(对于默认/暗色和浅色主题).

这一切都随着ICS而改变(它可能在Honeycomb上有所改变,但我没有证实).默认/黑暗主题现在有一个黑暗,AlertDialog而灯光主题实际上有一个光AlertDialog.

由于我在我的应用程序上专门使用灯光主题,我可以通过加载WebView不同CSS文件的内容轻松解决我的问题.一种是深色文本颜色,适用于ICS以下版本,另一种是浅色文本颜色,适用于ICS及以上版本.如果不是OEM皮肤,这将主要解决我的问题.

在他们的ICS皮肤版本中,他们可能会提供暗/亮主题AlertDialog.或不.他们更有可能做到这一点,他们一如既往地提供黑暗和浅色的主题,但是对于AlertDialog唯一的黑暗版本,无论应用程序的主题如何.

我可以强制Holo我的应用程序并解决问题,但我不想干扰整个系统在用户设备上的外观.例如,如果他们有Sense并且非常喜欢它,我不想在使用我的应用程序时显示Holo主题AlertDialog.

最终,我的问题是:

那么,我该如何应对呢?如何确保我的文字在后台WebView可读AlertDialog?无论是Android版本,正在使用的主题还是由OEM设计的主题......

我不知道这有多可行,但解决这个问题的另一种方法是以某种方式从AlertDialog设备中的主题中提取文本颜色.但不是默认主题或Holo主题,而是DeviceDefault我相信的主题.

这种萃取很容易完成吗?它能解决我的问题吗?你还有其他选择吗?

最后一个细节......如果您观看了环聊以及实际回复我的人,其中一人建议注入CSS.如果我以前不清楚,我不需要这样做.我只需要用WebView我想要的CSS 构建内容String,它可以采用从主题中提取的文本颜色.

android colors android-webview android-theme android-alertdialog

10
推荐指数
1
解决办法
3067
查看次数

Android自定义主题:横向和纵向模式的不同主题

我将自定义主题应用于我的活动:<activity android:theme="@style/MyTheme">,其中我定义了我在此活动中使用的ActionBarSherlock的大小.像这样的东西:

<style name="MyTheme" parent="@style/Theme.Sherlock.Light.DarkActionBar">
    <item name="actionBarSize">45dp</item>                             
    <item name="android:actionBarSize">45dp</item>     
</style>
Run Code Online (Sandbox Code Playgroud)

虽然这个尺寸适合纵向模式,但我觉得它在横向模式下太大了.如何在横向模式下应用不同的主题,或者如何在用户横向使用应用程序时更改操作栏大小?有什么建议?谢谢.

android android-layout android-theme actionbarsherlock

10
推荐指数
1
解决办法
5085
查看次数

主题中的Android textAllCaps

我有一个主题,希望所有关于活动的文本视图都被大写.所以我在一个样式中设置textAllCaps,然后将其应用到我的主题中的textViewStyle,如下所示

<style name="Widget.Apex.TextView" parent="android:Widget.TextView">
  <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
  <item name="android:textAllCaps">true</item>
</style>

<style name="MyTheme" parent="@android:style/Theme.Holo">
  <item name="android:textViewStyle">@style/Widget.Apex.TextView</item>
</style>
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致我的应用程序标题,ActionBar字幕和popmenu项目变为大写的副作用.所以我想我会在我的主题中设置ActionBarStyle,textAppearanceLargePopupMenu和textAppearanceSmallPopupMenu属性,以获得textAllCaps = false的自定义样式.但是,这不起作用.我知道我的主题正在应用,因为如果我设置textColor或textStyle,它们都会应用于标题和菜单项.是否可以覆盖这些样式中的textAllCaps?

<style name="Widget.Apex.TextView" parent="android:Widget.TextView">
  <item name="android:textAppearance">?android:attr/textAppearanceSmall</item>
  <item name="android:textAllCaps">true</item>
</style>
<style name="TextAppearance.Apex.Widget.ActionBar.Title" parent="android:TextAppearance.Holo.Widget.ActionBar.Title">
  <item name="android:textAllCaps">false</item>
  <item name="android:textStyle">italic</item>
</style>
<style name="TextAppearance.Apex.Widget.ActionBar.Subtitle" parent="android:TextAppearance.Holo.Widget.ActionBar.Subtitle">
  <item name="android:textAllCaps">false</item>
  <item name="android:textStyle">italic</item>
  <item name="android:textColor">#FF0000</item>
</style>
<style name="TextAppearance.Apex.Widget.PopupMenu.Large" parent="android:TextAppearance.Holo.Widget.PopupMenu.Large">
  <item name="android:textAllCaps">false</item>
  <item name="android:textStyle">italic</item>
  <item name="android:textColor">#FF0000</item>
</style>
<style name="TextAppearance.Apex.Widget.PopupMenu.Small" parent="android:TextAppearance.Holo.Widget.PopupMenu.Small">
  <item name="android:textAllCaps">false</item>
  <item name="android:textStyle">italic</item>
  <item name="android:textColor">#FF0000</item>
</style>
<style name="Widget.Apex.ActionBar" parent="android:Widget.Holo.ActionBar">
  <item name="android:titleTextStyle">@style/TextAppearance.Apex.Widget.ActionBar.Title</item>
  <item name="android:subtitleTextStyle">@style/TextAppearance.Apex.Widget.ActionBar.Subtitle</item>
</style>

<style name="MyTheme" parent="@android:style/Theme.Holo">
  <item name="android:actionBarStyle">@style/Widget.Apex.ActionBar</item>
  <item name="android:textAppearanceLargePopupMenu">@style/TextAppearance.Apex.Widget.PopupMenu.Large</item>
  <item …
Run Code Online (Sandbox Code Playgroud)

android android-layout android-theme

10
推荐指数
1
解决办法
1万
查看次数

Android应用程序的日/夜主题

我有一个应用程序,我需要实现日/夜主题.不幸的是,通过使用样式没有简单的方法来制作主题,我需要能够更新:布局背景,按钮选择器,文本颜色,文本大小,图像,图标,动画.

从我看到我有2个选项:

  1. 有不同的xml布局文件为night/day,所以像home_day.xml/ home_night.xml.应用程序中有大约30个屏幕,因此最终将有60 xml布局.关于活动/片段onCreate,基于当前小时我可以setContentView.这会添加更多xml文件,但可以避免在活动中添加更多代码

  2. 只有一个日/夜布局和活动的onCreatefindviewById我想要主题的每个项目,并根据当前日/夜更新他的属性.这可能会为许多视图生成大量额外代码,查找视图和应用属性.

我的目标是2.但我愿意接受你的任何建议.那么,你会选择什么?为什么?

android android-theme

10
推荐指数
4
解决办法
2万
查看次数

如何在对话框打开时为活动设置可取消的false?

嗨,我做了一个活动,我打开一个活动作为另一个活动的对话框弹出窗口,所以我问.这是我的主题的问题,

 <item `name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>`
Run Code Online (Sandbox Code Playgroud)

但我不知道我应该改变什么值,"windowCloseOnTouchOutside"以便我可以做我的活动对话框设置取消错误..?我的主题代码如下:

 <style name="Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowTitleStyle">@android:style/DialogWindowTitle</item>
        <item name="android:windowBackground">@android:drawable/panel_background</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
        <item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
        <item name="android:windowCloseOnTouchOutside">@bool/config_closeDialogWhenTouchOutside</item>
        <item name="android:windowActionModeOverlay">true</item>

        <item name="android:colorBackgroundCacheHint">@null</item>

        <item name="textAppearance">@android:style/TextAppearance</item>
        <item name="textAppearanceInverse">@android:style/TextAppearance.Inverse</item>

        <item name="textColorPrimary">@android:color/primary_text_dark</item>
        <item name="textColorSecondary">@android:color/secondary_text_dark</item>
        <item name="textColorTertiary">@android:color/tertiary_text_dark</item>
        <item name="textColorPrimaryInverse">@android:color/primary_text_light</item>
        <item name="textColorSecondaryInverse">@android:color/secondary_text_light</item>
        <item name="textColorTertiaryInverse">@android:color/tertiary_text_light</item>
        <item name="textColorPrimaryDisableOnly">@android:color/primary_text_dark_disable_only</item>
        <item name="textColorPrimaryInverseDisableOnly">@android:color/primary_text_light_disable_only</item>
        <item name="textColorPrimaryNoDisable">@android:color/primary_text_dark_nodisable</item>
        <item name="textColorSecondaryNoDisable">@android:color/secondary_text_dark_nodisable</item>
        <item name="textColorPrimaryInverseNoDisable">@android:color/primary_text_light_nodisable</item>
        <item name="textColorSecondaryInverseNoDisable">@android:color/secondary_text_light_nodisable</item>
        <item name="textColorHint">@android:color/hint_foreground_dark</item>
        <item name="textColorHintInverse">@android:color/hint_foreground_light</item>
        <item name="textColorSearchUrl">@android:color/search_url_text</item>

        <item name="textAppearanceLarge">@android:style/TextAppearance.Large</item>
        <item name="textAppearanceMedium">@android:style/TextAppearance.Medium</item>
        <item name="textAppearanceSmall">@android:style/TextAppearance.Small</item>
        <item name="textAppearanceLargeInverse">@android:style/TextAppearance.Large.Inverse</item>
        <item name="textAppearanceMediumInverse">@android:style/TextAppearance.Medium.Inverse</item>
        <item name="textAppearanceSmallInverse">@android:style/TextAppearance.Small.Inverse</item>

        <item name="listPreferredItemPaddingLeft">10dip</item>
        <item name="listPreferredItemPaddingRight">10dip</item>
        <item name="listPreferredItemPaddingStart">10dip</item> …
Run Code Online (Sandbox Code Playgroud)

android themes android-theme

10
推荐指数
1
解决办法
1万
查看次数

创建可下载的自定义主题并在运行时应用它

我正在制作一个Android应用程序,需要允许客户端维护其服务器的资源,包括字符串,drawables等.

我已经创建了一个下载包含所有这些文件的zip文件的机制,他们能够很容易地更改字符串,我还创建了一种机制,允许客户端更改UI控件的bg颜色,更改宽度,身高等,但我有一种感觉,必须有一个更好的方法来创造这一切.

所以我认为真正的问题是:

创建自定义主题,将其部署在服务器上,让应用程序下载并在之后将其应用于应用程序的最佳做法是什么?

我知道如何创建自定义主题以及如何使用应用程序部署它,以及如何在运行时应用它,但问题是资源是预编译的,一旦你创建APK,开发人员就无法改变它们需要添加新主题/ drawables/styles/strings.

我是否需要为所有这些创建自定义机制(从文件系统加载图像,样式,字符串等)并在运行时通过创建我自己的控件来应用它们,例如在构造函数中这样做或者有办法做什么这个正常:)?(Swiftkey如何在所有键盘主题中执行此操作,以及类似应用程序如何执行此操作以允许用户下载主题并在此之后应用它)?

我很抱歉,如果我没有看到类似的问题,我真的试图在过去2天内找到答案,但我没有找到任何有用的东西,所以这是我获得建设性答案的最后机会:).

我需要的最接近解决方案是这个答案:使用外部主题文件在运行时更改应用程序主题但我已经完成了这个功能,我知道我可以改变这样的颜色,但问题是我希望能够改变边界,按钮按下状态等需要资源而不是简单颜色值的东西:(.

谢谢堆!

PS我也读过关于扩展文件的内容,所以在考虑这个问题时我需要考虑一下,或者我需要在其他地方查找?obb文件的问题在于它们必须部署在PlayStore上并且对于客户端来说并不"完美",因为他们需要使用jobb来打包它,并将它部署到PlayStore,这对他们来说太技术化了,所以他们更喜欢创建一个zip文件,把它放在服务器上,应用程序应该做其余的:).

android android-theme

10
推荐指数
1
解决办法
1491
查看次数

工具栏搜索建议主题

我正在尝试将搜索建议更改为"轻量级主题".我正在使用appcompat-v7:22.2.0库并阅读有关自定义搜索视图小部件(android.support.v7.widget.SearchView)的新功能.

第一部分

工具栏

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="?attr/colorPrimary"
    android:minHeight="?attr/actionBarSize"
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Run Code Online (Sandbox Code Playgroud)

主旋律

<style name="Main.Theme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/red</item>
    <item name="colorPrimaryDark">@color/red_dark</item>
    <item name="searchViewStyle">@style/Main.Theme.SearchView</item>
</style>
Run Code Online (Sandbox Code Playgroud)

SearchView主题

<style name="Main.Theme.SearchView" parent="Widget.AppCompat.Light.SearchView">
    <item name="voiceIcon">@mipmap/test_icon</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这样我就无法影响搜索视图.为了测试它,我正在更改搜索视图中的语音图标,并且它不会从默认值更改.

第二部分

第二个尝试是覆盖工具栏中的叠加主题:

叠加主题

<style name="Main.Theme.Overlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar">
    <item name="searchViewStyle">@style/Main.Theme.SearchView</item>
</style>
Run Code Online (Sandbox Code Playgroud)

这样我得到一些反馈,但我失去了"材料设计",特别是我的"旧"提示图标,并且它有下划线.我的最终目标是更改搜索建议行背景:

建议行布局

<item name="suggestionRowLayout">@layout/my_custom_layout</item>
Run Code Online (Sandbox Code Playgroud)

我认为我很难实现这个目标......你能帮助我吗?

android android-layout android-theme android-support-library android-search

10
推荐指数
1
解决办法
3308
查看次数

浮动操作按钮和设计库膨胀错误

我正在使用设计支持库

defaultConfig {
        vectorDrawables.useSupportLibrary = true
        ...
}

dependencies {
    compile 'com.android.support:design:23.4.0'
    compile 'com.android.support:support-v4:23.4.0'
    ...
}
Run Code Online (Sandbox Code Playgroud)

当我添加FloatingActionButton时

<android.support.design.widget.FloatingActionButton
    android:layout_gravity="right"
    android:layout_margin="20dp"
    android:tint="#fff"
    android:src="@drawable/ic_menu_manage"
    app:backgroundTint="#b3000000"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

到我的一个布局我得到这个错误

Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
Run Code Online (Sandbox Code Playgroud)

这是我的主要活动(it has navigation drawer)

public class MapNavActivity extends AppCompatActivity
Run Code Online (Sandbox Code Playgroud)

我知道,如果我改变它应该工作AppCompatActivityActivity

但是,这对我不起作用.这是清单文件中定义的活动

<activity
    android:name=".MapNavActivity"
    android:label="@string/title_activity_map_nav"
    android:theme="@style/AppTheme.NoActionBarMain" />
Run Code Online (Sandbox Code Playgroud)

这是styles.xml文件中的主题

<style name="AppTheme.NoActionBarMain" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
    </style>

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme …
Run Code Online (Sandbox Code Playgroud)

android android-inflate android-theme android-support-library floating-action-button

10
推荐指数
1
解决办法
1052
查看次数

如何在android主题声明中添加自定义项?

我在styles.xml中有很少的自定义主题
现在每当活动采用主题时,它都使用colorPrimary,colorPrimaryDarkcolorAccent值.
对于我的布局背景我正在使用?attr/colorAccent,因此它可以根据所选主题选择背景颜色.
如果我使用上述任何值,它工作正常.但我想为我的背景颜色定义一个自定义项目值.
我在下面尝试了这个,但它没有奏效.任何使它成功的想法?
我的自定义主题具有自定义值:

<style name = "customTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">#4285f4</item>
    <item name="colorPrimaryDark">#2C75F2</item>
    <item name="colorAccent">#E1FFC7</item>
    <item name="customBgColor">#d3d3d3</item>
</style>
Run Code Online (Sandbox Code Playgroud)


我想在布局的风格中使用它

<style name="layoutStyle" >
    <item name="android:background">?attr/customBgColor</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android android-theme android-styles

10
推荐指数
1
解决办法
2895
查看次数

在android中为库项目设置不同的主题

在包含库项目的android项目中,我需要在主应用程序和库的清单中设置不同的主题.就像我需要在主项目中设置以下主题

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorPrimary">@color/grey</item>
  <item name="colorPrimaryDark">@color/black</item>
  <item name="colorAccent">@color/green</item>
</style>
Run Code Online (Sandbox Code Playgroud)

以及图书馆项目下面的那个

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
  <item name="colorPrimary">@color/blue</item>
  <item name="colorPrimaryDark">@color/red</item>
  <item name="colorAccent">@color/white</item>
</style>
Run Code Online (Sandbox Code Playgroud)

主应用程序样式会覆盖库项目样式.当我为样式指定不同的名称时,它会抛出明显的合并冲突错误.

以下是主应用程序的清单

<application
  android:name=".MyApp"
  android:allowBackup="true"
  android:icon="@mipmap/ic_launcher"
  android:label="@string/app_name"
  android:supportsRtl="true"
  android:theme="@style/AppTheme">
Run Code Online (Sandbox Code Playgroud)

这个是图书馆的

<application
  android:allowBackup="true"
  android:label="@string/app_name"
  android:supportsRtl="true"
  android:theme="@style/AppTheme"
  >
Run Code Online (Sandbox Code Playgroud)

android styles android-manifest android-library android-theme

10
推荐指数
1
解决办法
5169
查看次数