标签: 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
查看次数

对话主题活动:正面和负面按钮

我试图将一项活动作为主题AlertDialog.我面临的问题是我无法找到一种方法将两个按钮放在我的窗口底部,看起来像是正面和负面的按钮.AlertDialog

我已经将该行添加到清单中的Activity(我正在使用Sherlock Library):

android:theme="@style/Theme.Sherlock.Dialog"
Run Code Online (Sandbox Code Playgroud)

活动看起来就像一个Dialog,但我找不到按钮设置的主题.我能做什么?

android android-theme android-dialog

9
推荐指数
1
解决办法
2739
查看次数

半透明主题的问题

我有一个有两个活动的应用程序.第一个显示一个按钮,打开第二个按钮.

这是第一个最明智的定义:

<activity
    android:name="com.example.buttonexample.MainActivity">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)

第二项活动:

<activity
    android:name="com.example.buttonexample.MainActivity2"
    android:label="@string/title_activity_main_activity2" android:theme="@android:style/Theme.Translucent">
</activity>
Run Code Online (Sandbox Code Playgroud)

以下是我如何启动第二个活动(通过OnClickListener获取第一个活动上的按钮):

public void startSecondActivityClick(View v) {
   Intent startActivity2 = new Intent(this, MainActivity2.class);
   startActivity(startActivity2);
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,但是当我通过击中主页和应用程序的前景来后台应用程序.我注意到第一个活动是不断创造/摧毁自己.我通过在onDestory方法中添加一些代码来增加静态int来验证这一点:

private static int count = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    count++;

}

protected void onDestroy() {
    super.onDestroy();
    Log.i("MainActivity", String.format("Destroyed, %d", count));
}
Run Code Online (Sandbox Code Playgroud)

我也注意到删除半透明主题似乎解决了这个问题.我的问题是有没有办法半透明或类似的东西,但也没有重新启动?而且,我很好奇为什么会发生这种情况.我正在使用Galaxy SIII上的4.0.1 ICS进行测试.

android android-theme

9
推荐指数
1
解决办法
374
查看次数

继承自Theme.AppCompat*

目前正致力于在支持库中迁移到ActionBar.目前正在尝试迁移我的旧主题继承,Theme.AppCompat.Light.DarkActionBar但它并不是很顺利.

如果我在清单中应用主题就可以了:

<activity
    android:name="com.fitsby.LoginActivity"
    android:screenOrientation="portrait"
    android:theme="@style/Theme.AppCompat.Light.DarkActionBar" >
</activity>
Run Code Online (Sandbox Code Playgroud)

但是我得到一个运行时错误,声明LoginActivity(ActionBarActivity的子类)必须有一个继承自Theme.AppCompat的主题,当我执行以下操作时:在styles.xml中:

<style name="AppTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
    <item name="android:typeface">sans</item>   
</style> 
Run Code Online (Sandbox Code Playgroud)

并在清单中:

<activity
    android:name="com.fitsby.LoginActivity"
    android:screenOrientation="portrait"
    android:theme="@style/AppTheme" >
</activity>
Run Code Online (Sandbox Code Playgroud)

任何想法为什么会发生这种情况?我没有看到任何问题,因为AppTheme显然继承了AppCompat主题之一.

android android-theme

9
推荐指数
1
解决办法
7123
查看次数

如何制作透明的AppCompat风格?

我的活动风格必须来自AppCompat主题.

所以我在清单中制作自定义样式并设置活动样式.

但是显示了黑色背景.

以下是自定义主题

<style name="TransparentTheme" parent="@style/Theme.AppCompat">

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

    <item name="android:windowBackground">@null</item>
    <item name="android:colorBackgroundCacheHint">@null</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@null</item>
</style>
Run Code Online (Sandbox Code Playgroud)

android android-appcompat android-theme android-styles

9
推荐指数
1
解决办法
8931
查看次数

Android styles.xml windowNoTitle(ActionBarActivity)

我想在我的应用程序中隐藏标题栏(显示活动磁贴的位置).我这样做是通过将android:windowNoTitle项目设置为true.这适用于API级别为19的设备.我使用运行API级别10的设备对其进行了测试,它只隐藏了通知栏.瓷砖栏仍然显示.

这是我的 res/values/styles.xml

<resources>
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
    </style>

</resources>
Run Code Online (Sandbox Code Playgroud)

编辑:我AppBaseTheme在我的清单中使用了作为主题.任何其他value-vXX文件夹中没有其他styles.xml文件.

编辑#2:我正在扩展ActionBarActivity我的活动.

android android-theme android-styles

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

更改PreferenceActivity中片段的突出显示和标题颜色

我正在使用Material主题,我想更改下图中两个标记区域的颜色 - 即高亮颜色(#1)和细节片段中标题的颜色(#2).

我知道主题中每个地方的颜色都有一个属性,但我似乎无法找到它.

在此输入图像描述

有任何想法吗?

android android-theme

9
推荐指数
1
解决办法
3225
查看次数

Android主题更改复选框项目文本颜色

如何在Android Studio的styles.xml中更改复选框视图的文本颜色?

我想创建一个主题,其中所有复选框项都是与默认黑色不同的颜色,如:

在此输入图像描述

除了我希望盒子本身与文本颜色相同.

我应该在我的主题中使用以下内容吗?

<item name="android:checkboxStyle">@style/App_CheckboxStyle</item>
Run Code Online (Sandbox Code Playgroud)

android android-theme

9
推荐指数
4
解决办法
8029
查看次数

java.lang.IllegalArgumentException:您需要将Theme.AppCompat主题(或后代)与设计库一起使用

我试图在本教程的帮助下从Material Design实现"带图像的灵活空间":

带有android设计支持库的工具栏动画

但我在布局预览中收到此渲染问题消息:

无法实例化以下类:

- android.support.design.widget.CoordinatorLayout(Open Class,Show Exception,Clear Cache) - android.support.design.widget.AppBarLayout(Open Class,Show Exception,Clear Cache)

我将Theme.AppCompat主题应用到我的应用程序中,但它会在每个其他活动中搞砸操作栏和外观.此外,它会在操作栏方法上引发错误,例如:

actionBar.setDisplayHomeAsUpEnabled(真);

将错误(粗略地)陈述为:

在null对象引用上调用setDisplayHomeAsUpEnabled(boolean)

此外Theme.AppCompat,在整个应用程序中使用预览屏幕会出现以下错误:

找不到以下类: - android.support.v7.internal.app.WindowDecorActionBar(修复构建路径,创建类)

因此,我不想Theme.AppCompat用于整个应用程序.然而,使用Theme.AppCompat了,我想用"与图像弹性空间"的具体活动设计不能解决CoordinatorLayoutAppBarLayout前面提到的问题.

请告诉我该怎么办!我已经在同一个问题上阅读了很多stackoverflow帖子,但它们对我不起作用!我重新启动了android studio并使我的缓存无效并重启了无数次!!

以下是我的依赖项 build.gradle

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile project(':viewPagerIndicator')
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}
Run Code Online (Sandbox Code Playgroud)

在手机上按原样运行应用程序会出现此错误:

java.lang.IllegalStateException:此Activity已经有一个由窗口装饰提供的操作栏.不要在主题中请求Window.FEATURE_SUPPORT_ACTION_BAR并将windowActionBar设置为false以使用工具栏.

将windowActionBar设置为false,如下所示:

<item name="windowActionBar">false</item>
Run Code Online (Sandbox Code Playgroud)

然后运行该应用程序会抛出此错误:

java.lang.RuntimeException:无法启动活动ComponentInfo {com.seven.actionbar/com.seven.actionbar.EventsDetailActivity}:java.lang.IllegalArgumentException:AppCompat不支持当前主题功能:{windowActionBar:false,windowActionBarOverlay:false ,android:windowIsFloating:false,windowActionModeOverlay:false,windowNoTitle:false}

以下是EventsDetailsActivity.java文件中的工具栏位:

    Toolbar toolbar;
    CollapsingToolbarLayout collapsingToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_eventsdetail); …
Run Code Online (Sandbox Code Playgroud)

java android android-theme material-design

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

colorAccent 或 colorSecondary 与 Material Component 主题

使用 Android Studio 向导创建新应用程序时,使用派生自的主题Theme.MaterialComponents.Light.DarkActionBarcolorAccent设置 a。另一方面,官方文档使用colorSecondary并且根本没有提及colorAccent。两者可以互换吗?更喜欢什么?

android android-theme material-components material-components-android

9
推荐指数
2
解决办法
3260
查看次数