美文网首页
页面启动的时候对页面中View做拦截和替换

页面启动的时候对页面中View做拦截和替换

作者: 飞翔的超人 | 来源:发表于2019-04-17 17:46 被阅读0次

AppCompatActivity怎么对View做的拦截中分析了AppCompatActivity是怎么对View做拦截的。只需要在setContentView方法之前设置下factory就可以了

public class MainActivity extends Activity {
    @ViewById(R.id.textView)
    TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ViewUtils.inject(this);
        LayoutInflater layoutInflater = LayoutInflater.from(this);
        LayoutInflaterCompat.setFactory2(layoutInflater, new LayoutInflater.Factory2() {
            @Override
            public View onCreateView(View parent, String name, Context context, AttributeSet attrs) {
                if ("TextView".equals(name)){
                    Button button=new Button(MainActivity.this);
                    button.setText("button");
                    return button;
                }
                return null;
            }

            @Override
            public View onCreateView(String name, Context context, AttributeSet attrs) {
                return null;
            }
        });
        setContentView(R.layout.activity_main);
}

将页面内的TextView控件替换为Button。

设置factory-->setContentView(内部执行LayoutInflater.inflate-->有设置factory回调factory的onCreateView方法)-->回调LayoutInflaterCompat.setFactory2中重写的onCreateView方法,完成View拦截和替换

运行截图

device-2019-04-17-174259.png

相关文章

网友评论

      本文标题:页面启动的时候对页面中View做拦截和替换

      本文链接:https://www.haomeiwen.com/subject/hhtowqtx.html