通過反射修改第三方Activity 背景 解決方案 完整源代碼

背景

項目中使用了第三方的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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章