WindowManager addview生成的view有一个button,点击button后start 新的activity,怎么让新activity覆盖view,新activity返回后view继续显示
时间: 2024-03-23 15:43:33 浏览: 116
要实现这个功能,您可以在当前Activity中创建一个透明的Activity,并在点击按钮时启动它。在透明的Activity中,您可以显示您想要覆盖在当前视图上的内容。当透明的Activity返回时,您可以将其关闭,并恢复当前Activity上的视图。
以下是一个示例代码:
在当前Activity中,您可以通过以下方式添加一个带有按钮的视图:
```java
// 创建一个 WindowManager 对象
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建一个 LayoutParams 对象,用于设置视图的位置、大小、类型等参数
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
// 创建一个视图,并将其添加到 WindowManager 中
View view = LayoutInflater.from(this).inflate(R.layout.my_layout, null);
Button button = view.findViewById(R.id.my_button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 启动透明的 Activity
Intent intent = new Intent(MainActivity.this, OverlayActivity.class);
startActivity(intent);
}
});
windowManager.addView(view, params);
```
在透明的Activity中,您可以添加一个覆盖在当前视图上的内容:
```java
public class OverlayActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 将 Activity 的背景设置为透明
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
// 添加一个覆盖在当前视图上的内容
View overlay = LayoutInflater.from(this).inflate(R.layout.overlay_layout, null);
setContentView(overlay);
}
@Override
public void onBackPressed() {
// 当用户按下返回键时,关闭当前 Activity
finish();
}
}
```
当用户点击按钮时,透明的Activity将覆盖在当前视图上。当用户在透明的Activity中返回时,它将被关闭,并恢复当前Activity上的视图。
阅读全文