我知道这个问题被问了几次。但我不能在我的情况下找到问题。 我想改变应用程序的主题,但我的colorPrimary,colorAccent等不会改变。setTheme不改变主题颜色
我的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>
根据前面的问题,此代码应工作,但在我的情况有colorPrimary在其XML的观点仍在加载老主题的颜色insted的,即使我设置了主题befo新一重新打电话setContentView(R.layout.activity_main);
谢谢!
你硬编码的主题BaseActivity值,比获取引用资源ID。你需要把setTheme(value_from_resourceId); BaseActivity总是调用setTheme(R.style.c_2ecc71_BC6C2B); 比运行时间值 – Stallion