android 如何在代码的任意位置为当前的Activity添加view

本文介绍了如何在Android代码的任意位置为当前Activity添加View,主要讲解了两种方法:使用WindowManager和监听Activity状态。重点讨论了通过监听Activity并利用android.R.id.content来添加View的技巧,并提醒在Application中进行注册。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果在当前的Activity添加View就很简单 我们可以在布局xml中或者拿到当前的根View去添加一个View就行,如果是在代码的任意位置添加View,我相信不是每个人都会的,这一般有二种做法,第一种做法是使用WindowManager 第二种做法是监听每个Activity然后添加,今天主要讲的是第二种做法,

我们知道Activity有addContentView()方法可以添加一个view,但是Activity并没有removeView()方法,如果我们有阅读过view的加载过程源码发现在我们的activity显示的内容会有一个view它的id就是android.R.id.content,我们可以利用这个去做

public class ActivitySelfManager implements Application.ActivityLifecycleCallbacks {
    private ViewGroup contentView;
    private TextView textView;

    @Override
    public void onActivityCreated(Activity activity, Bundle savedInstanceState) {

    }

    @Override
    public void onActivityStarted(Activity activity) {

    }

    @Override
    public void onActivityResumed(Activity activity) {
        contentView =  activity.findViewById(android.R.id.content);
        textView = new TextView(activity);
        textView.setTextColor(Color.RED);
        textView.setText(activity.getClass().getSimpleName());
        ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(300,400);
        addView(textView,layoutParams);
    }

    @Override
    public void onActivityPaused(Activity activity) {

    }

    @Override
    public void onActivityStopped(Activity activity) {

    }

    @Override
    public void onActivitySaveInstanceState(Activity activity, Bundle outState) {

    }

    @Override
    public void onActivityDestroyed(Activity activity) {
        removeContentView(textView);
    }

    public void addView(View view, ViewGroup.LayoutParams layoutParams){
        if(null==view){
            return;
        }
        contentView.addView(view,layoutParams);
    }
    public void removeContentView(View view){
        contentView.removeView(view);
    }
}

然后记得在Application中去注册下

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        init();
    }

    private void init() {
        registerActivityLifecycleCallbacks(new ActivitySelfManager());
    }
}

大概思路就是这样了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值