教你如何动态更换显示的View(可实现APP换肤功能)

我在xml布局中编写了一个TextView,现在让我们通过如下代码构造一个Button去替换xml布局中的TextView吧!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
@Override
protected void onCreate(Bundle savedInstanceState) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflaterCompat.setFactory2(inflater, new LayoutInflater.Factory2() {
@Nullable
@Override
public View onCreateView(@Nullable View parent, @NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
if (name.equals("TextView")) {
return new Button(context, attrs);
}
return null;
}

@Nullable
@Override
public View onCreateView(@NonNull String name, @NonNull Context context, @NonNull AttributeSet attrs) {
return null;
}
});
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);

正常代码效果:
图片描述

动态替换成Button之后的效果:
图片描述

拓展:我们可以通过这种方式进行APP的换肤或者更换View等骚操作!

后面看有时间的话给大家写一篇APP插件换肤功能的实现吧(主要是懒)。

以上代码必须写在super.onCreate(savedInstanceState);这句代码之前,否则会报错的哦~

By the way :系统向下兼容就是采用的这种方式,悄悄将View替换成AppCompatEditText、AppCompatImageView、AppCompatButton等兼容性控件,从而达到向下兼容的目的!


教你如何动态更换显示的View(可实现APP换肤功能)
https://blog.funkt.cn/2020/06/18/1273499715320709120/
作者
anjiemo
发布于
2020年6月18日
许可协议
未经作者授权,禁止转载