背景

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

解决方案

继承该Activity,通过反射获取属性,并进行修改。

样例:

第三方Activity界面如下:

通过反射修改第三方Activity_git

修改后界面:

通过反射修改第三方Activity_bundle_02

主要代码:

  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