此问题最初发布在谷歌版主上,用于上周举行的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
我试图将一项活动作为主题AlertDialog.我面临的问题是我无法找到一种方法将两个按钮放在我的窗口底部,看起来像是正面和负面的按钮.AlertDialog
我已经将该行添加到清单中的Activity(我正在使用Sherlock Library):
android:theme="@style/Theme.Sherlock.Dialog"
Run Code Online (Sandbox Code Playgroud)
活动看起来就像一个Dialog,但我找不到按钮设置的主题.我能做什么?
我有一个有两个活动的应用程序.第一个显示一个按钮,打开第二个按钮.
这是第一个最明智的定义:
<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进行测试.
目前正致力于在支持库中迁移到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主题之一.
我的活动风格必须来自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: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我的活动.
我正在使用Material主题,我想更改下图中两个标记区域的颜色 - 即高亮颜色(#1)和细节片段中标题的颜色(#2).
我知道主题中每个地方的颜色都有一个属性,但我似乎无法找到它.

有任何想法吗?
如何在Android Studio的styles.xml中更改复选框视图的文本颜色?
我想创建一个主题,其中所有复选框项都是与默认黑色不同的颜色,如:
除了我希望盒子本身与文本颜色相同.
我应该在我的主题中使用以下内容吗?
<item name="android:checkboxStyle">@style/App_CheckboxStyle</item>
Run Code Online (Sandbox Code Playgroud) 我试图在本教程的帮助下从Material Design实现"带图像的灵活空间":
但我在布局预览中收到此渲染问题消息:
无法实例化以下类:
- 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了,我想用"与图像弹性空间"的具体活动设计不能解决CoordinatorLayout与AppBarLayout前面提到的问题.
请告诉我该怎么办!我已经在同一个问题上阅读了很多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) 使用 Android Studio 向导创建新应用程序时,使用派生自的主题Theme.MaterialComponents.Light.DarkActionBar并colorAccent设置 a。另一方面,官方文档使用colorSecondary并且根本没有提及colorAccent。两者可以互换吗?更喜欢什么?
android android-theme material-components material-components-android