【发布时间】:2017-01-10 17:43:08
【问题描述】:
我知道这个问题被问过几次。但我找不到我的问题。 我想更改应用程序的主题,但我的 colorPrimary 、 colorAccent 等......没有改变。
我的 MainActivity 扩展了 BasicActivity。它看起来像这样:
public class MainActivity extends BasicActivity {
public static String MY_PREFS = "MY_PREFS";
private SharedPreferences mySharedPreferences;
int prefMode = Activity.MODE_PRIVATE;
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
private ViewPagerAdapter adapter;
private TextView tabOne, tabTwo, tabThree;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
这是我的 BasicActivity(在这种情况下,我更简单地表明主题取自 R.style):
public class BasicActivity extends AppCompatActivity {
public static String MY_PREFS = "MY_PREFS";
int prefMode = Activity.MODE_PRIVATE;
protected void onCreate(Bundle savedInstanceState) {
JsonParser parser = new JsonParser(getApplicationContext());
int resourceId = this.getResources().getIdentifier(parser.getThemeID(), "style", this.getPackageName());
setTheme(R.style.c_2ecc71_BC6C2B);
if (android.os.Build.VERSION.SDK_INT >= 19) {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
super.onCreate(savedInstanceState);
}
}
还有我的 XML:
<style name="c_2ecc71_BC6C2B" parent="@style/Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">#2ecc71</item>
<item name="colorPrimaryDark">#1ebc61</item>
<item name="colorAccent">#BC6C2B</item>
</style>
根据前面的问题,这段代码应该可以工作,但在我的情况下,即使我在调用 setContentView(R.layout.activity_main); 之前设置了主题,在其 XML 中具有 colorPrimary 的视图仍会加载旧主题的颜色,但仍会加载新主题的颜色
谢谢!
【问题讨论】:
-
您已经在 BaseActivity 中硬编码了主题,而不是获取引用资源 ID。你需要把 setTheme(value_from_resourceId); BaseActivity 总是调用 setTheme(R.style.c_2ecc71_BC6C2B);比运行时值