相关疑难解决方法(0)

当inflater与ApplicationContext一起使用时,不应用主题/样式

我有一个主题,将TextView的textColor指定为红色.

我正在使用LayoutInflater来实例化TextView.问题是当使用ApplicationContext创建的inflater时,样式不会应用于TextView - 颜色不是红色.使用activity创建LayoutInflater时,一切正常.

为什么会发生这种情况,如何解决?

/res/values/styles.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="MyTheme">
        <item name="android:textViewStyle">@style/MyTextView</item>
    </style>

    <style name="MyTextView" parent="@android:style/Widget.TextView">
        <item name="android:textColor">#f00</item>
    </style>
</resources>
Run Code Online (Sandbox Code Playgroud)

AndroidManifest.xml中:

<application 
    android:icon="@drawable/icon" 
    android:label="@string/app_name"
    android:theme="@style/MyTheme"
    >
Run Code Online (Sandbox Code Playgroud)

码:

public class A extends Activity {

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

        final LayoutInflater goodInflater = getInflater((Activity)this); 
        final LayoutInflater badInflater = getInflater(getApplicationContext());
        final LinearLayout container = (LinearLayout)findViewById(R.id.container);

        findViewById(R.id.add_with_appContext).setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                add(container, badInflater); // Creates gray TextView
            }            
        });

        findViewById(R.id.add_with_activity).setOnClickListener(new OnClickListener() {
            @Override
            public …
Run Code Online (Sandbox Code Playgroud)

android themes coding-style

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

标签 统计

android ×1

coding-style ×1

themes ×1