- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在努力寻找导致我的整个应用程序中的 Views
出现奇怪的格式样式不一致的原因,我想我已经通过这个示例缩小了范围。
我使用完全相同的过程设置了各种 Views
的两个等效布局,并且仅改变了创建时提供的 Context
。在第一组中,每个 View
都是通过 Activity.getApplicationContext()
使用应用程序上下文创建的,而在第二组中,View
是通过 this
提供 Activity 的上下文。
结果大不相同:
关于为什么使用应用程序上下文会导致屏幕截图中出现垃圾(并且不一致 - 颜色是白色和灰色)格式的任何建议?
Activity 代码:
import android.os.Bundle;
import android.app.Activity;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Spinner;
import android.widget.TextView;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TextViews
TextView tv1 = new TextView(getApplicationContext());
tv1.setText("With Application context");
TextView tv2 = new TextView(this);
tv2.setText("With Activity context");
// Spinners
Spinner sp1 = new Spinner(getApplicationContext());
sp1.setAdapter(new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, new String[] {"App context 1", "App context 2", "App context 3"}));
Spinner sp2 = new Spinner(this);
sp2.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, new String[] {"Act context 1", "Act context 2", "Act context 3"}));
// Edittexts
EditText et1 = new EditText(getApplicationContext());
et1.setText("Application Context");
EditText et2 = new EditText(this);
et2.setText("Activity Context");
// Buttons
Button b1 = new Button(getApplicationContext());
b1.setText("Application Context");
Button b2 = new Button(this);
b2.setText("Activity Context");
// Layout structure
LinearLayout ll = new LinearLayout(this);
ll.setOrientation(LinearLayout.VERTICAL);
ll.addView(tv1);
ll.addView(sp1);
ll.addView(et1);
ll.addView(b1);
ll.addView(tv2);
ll.addView(sp2);
ll.addView(et2);
ll.addView(b2);
setContentView(ll);
}
}
list :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light" >
<activity
android:name="com.test.test.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
最佳答案
在 Android 源代码中,getApplicationContext()
返回扩展了 ContextWrapper
的 Application 对象,因此使用 getApplicationContext()
您将传递 ContextWrapper
子类,但是当你传递 this
时,你传递的是 Activity
对象,它扩展了 ContextThemeWrapper
所以你传递的是 ContextThemeWrapper
子类。现在 ContextWrapper
和 ContextThemeWrapper
之间的区别是 ContextWrapper
simply delegates all of its calls to another Context和 ContextThemeWrapper
allows you to modify the theme from what is in the wrapped context .
虽然问题更多的是关于为什么会发生这种情况(而不是明确的原因),但这里也有一些有用的帖子解释了不正确使用应用程序上下文的危险以及如何正确选择上下文:
最重要的来自@CommonsWare:“getApplicationContext() 不是一个完整的上下文,因此不支持 Activity 所做的一切。”
关于 Context 的精彩帖子应该澄清一切:
关于java - Android Holo Light 样式会根据所选上下文发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14824342/
我正在使用 HoloEverywhere-1.6.8。 我有一个基于 Holo.Theme 的自定义主题。 ... 我遇到了下面的崩溃,但它只出现在以下设备上: Galaxy Tab 10.1 P
我正在为 Android 使用 Keyboardsurfer 的 Crouton 类。它使用全息颜色作为背景颜色 (android.R.color.holo_red_light)。 现在这些颜色只会在
我有一个继承自 Theme.Holo.Light.DarkActionBar 的自定义主题,我正在尝试更改主题的 tabWidget 样式,使其看起来像是 Theme.Holo Dark。 我已经在我
所以我有一个应用程序是 Holo Light with Dark Actionbar,每当我在 EditText 中复制和粘贴某些内容时,图标都是白色的,因此您看不到它们。屏幕截图位于下方。有什么办法
最后我能够成功地实现库 Sherlock 和 Holo 。现在,在创建我自己的项目并在 list 文件中将主题设置为: android:theme="@style/Theme.Sherlock.Lig
有谁知道 Holo 主题聚焦按钮可绘制的位置在哪里? 我想将其设置为某些事件的 View ,但找不到它。 最佳答案 1.首先在您的 android sdk 平台文件夹中找到以下位置 - yourand
android:minSdkVersion="14"android:targetSdkVersion="18" 理论上很简单。 holo.light 的背景颜色是什么,因为我想对其他东西使用相同的颜色
在 api >= version 11 的设备上应用 holo 主题时我有点担心我的自定义按钮变大了(高度,宽度似乎是一样的) 这是没有holo的 这是全息他们 谁能告诉我这是什么原因造成的?以及是否
谁能帮我找到主题 Holo 等同于 @android:style/Theme.Translucent.NoTitleBar 我试过用 @android:style/Theme.Holo.Dialog
这个问题在这里已经有了答案: Spinner does not wrap text -- is this an Android bug? (15 个答案) 关闭 9 年前。 我最近刚刚在我的 And
谁能告诉我在Holo中选中的列表项对应的颜色代码?另外,在 Holo 中生成长按列表项过渡的颜色是什么?我知道全息颜色是在 colors.xml 中定义的,但我不确定哪些用于选择和长按列表项转换。提前
我有一个以 Holo.Light 主题为主题的应用。 AOSP ICS、Honeycomb 表现良好,但在 Samsung TouchWiz Honeycomb 上,EditText 背景、复选框等更
我目前正在使用带深色操作栏的 Holo 灯,我想更改我的应用以完全使用 Holo。我从 更改了 styles.xml ""到 "" 我在 values-14 内更改了 styles.xml ""到 "
您好,我想为我的应用程序添加全息主题,但是当我检查我的初始图形布局时,它似乎不起作用并且我的应用程序崩溃了。我想为整个应用程序添加全息主题。此外,我想摆脱启动画面之前的屏幕。我不知道该怎么做
Android Theme holo_dark 中 Normal 状态下的 Button 使用的是什么颜色? 我已阅读 this question并添加了与颜色名称相对应的彩色图像,但没有一个与 Bu
我只想将 Holo EditText 的背景更改为绿色。 是这样的:http://tinypic.com/view.php?pic=2n20k8l&s=8#.U6hMQ_ldWSo 这可能是一个愚蠢的
如果您将应用的主题设置为 Holo.Light,那么您可以获得浅色弹出菜单、深色文本等,这正是我想要的。但是,我的操作栏使用的是自定义的较深颜色,我希望溢出菜单(点)恢复为白色(就像您使用 Theme
我想更改 android Holo 主题的默认进度条颜色并保持默认行为。 我的目标是保持进度条不变(保持所有默认行为)并且只将其颜色更改为紫色。我想改变水平和不确定。 这是我到目前为止所做的: pro
我想构建一个选项卡式界面,所以我从 API 演示示例项目中获取了 Tabs3 View ,但是由于某种原因,我的应用程序没有应用 Holo 主题 It should look like this Bu
我已经构建了支持 android:minSdkVersion="7" android:targetSdkVersion="15" 的 android 应用程序。我使用继承 Android 默认主题的自
我是一名优秀的程序员,十分优秀!