public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//需要在子类setContentView之前替换掉factory2
hookFactory2();
}
private void hookFactory2() {
try {
Class<?> aClass = Class.forName("android.view.LayoutInflater");
Field mFactory2Field = aClass.getDeclaredField("mFactory2");
mFactory2Field.setAccessible(true);
mFactory2Field.set(getLayoutInflater(), new SkinFactory2());
} catch (Exception e) {
e.printStackTrace();
}
}
}
因为在android12中,setFactory2()的调用是在AppCompatActivity的构造方法中,所以不能像以往那样中setContentView之前通过getLayoutInflater().setFactroy2();的方式设置自定义的factory2。