美文网首页安卓开发
通过反射修改第三方Activity

通过反射修改第三方Activity

作者: 蓝不蓝编程 | 来源:发表于2021-03-16 10:35 被阅读0次

    背景

    项目中使用了第三方的Activity,但是要定制一下界面,隐藏或修改界面的一些元素。而这些元素在Activity中有定义属性,只是设置为private了,导致外界无法访问到。

    解决方案

    继承该Activity,通过反射获取属性,并进行修改。
    样例:
    第三方Activity界面如下:



    修改后界面:



    主要代码:
    1. 第三方activity代码:
    public class OriginalActivity extends AppCompatActivity {
    
        private Button button2;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_original);
            button2 = findViewById(R.id.button2);
        }
    }
    
    1. 反射修改activity
    public class ModifiedActivity extends OriginalActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            try {
                Field field = OriginalActivity.class.getDeclaredField("button2");
                field.setAccessible(true);
                Button button = (Button) field.get(this);
                button.setText("修改后按钮");
                button.setBackgroundColor(Color.parseColor("#FFB6C1"));
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
    

    完整源代码

    https://gitee.com/cxyzy1/reflectMofidyActivity.git

    相关文章

      网友评论

        本文标题:通过反射修改第三方Activity

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