背景
項目中使用了第三方的Activity,但是要定製一下界面,隱藏或修改界面的一些元素。而這些元素在Activity中有定義屬性,只是設置爲private了,導致外界無法訪問到。
解決方案
繼承該Activity,通過反射獲取屬性,並進行修改。
樣例:
第三方Activity界面如下:
修改後界面:
主要代碼:
- 第三方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);
}
}
- 反射修改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();
}
}
}