WindowManager addview生成的窗口有button,点击button后start activity,怎么让这个activity覆盖窗口
时间: 2024-03-23 11:43:23 浏览: 106
您可以使用以下代码将新的Activity的窗口类型设置为覆盖原始窗口:
```
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);
getWindow().setDimAmount(0.75f);
getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG);
```
您需要在新Activity的onCreate方法中添加这些代码。其中,第一行代码将在新Activity中创建一个半透明的背景,以便原始窗口的内容仍然可见。第二行代码设置背景的不透明度。第三行代码将新Activity的窗口类型设置为覆盖原始窗口。
请注意,这种方法只适用于覆盖一个具有相同或更低优先级的窗口。如果您想要覆盖具有更高优先级的窗口,您需要使用其他方法,例如在新Activity中使用DialogFragment。
相关问题
WindowManager addview生成的view有一个button,点击button后start 新的activity,怎么让新activity覆盖view,新activity返回后view继续显示
要实现这个功能,您可以在当前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上的视图。
WindowManager addview生成的view有一个button,点击button后start 新的activity,怎么让view不悬浮在新activity上
要实现这个功能,您可以在启动新Activity之前,从WindowManager中删除您添加的View。这样,当新Activity启动时,View就不会悬浮在上面了。
以下是一个实现的例子:
```
// 获取WindowManager
WindowManager windowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
// 创建一个包含Button的View
View view = LayoutInflater.from(this).inflate(R.layout.your_view_layout, null);
Button button = view.findViewById(R.id.your_button_id);
// 为Button设置点击事件,启动新Activity
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 从WindowManager中移除View
windowManager.removeView(view);
// 启动新的Activity
Intent intent = new Intent(YourCurrentActivity.this, YourNewActivity.class);
startActivity(intent);
}
});
// 将View加入到WindowManager中
WindowManager.LayoutParams layoutParams = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY,
WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE,
PixelFormat.TRANSLUCENT);
windowManager.addView(view, layoutParams);
```
在这个例子中,当Button被点击时,首先从WindowManager中移除View,然后启动新的Activity。这样,新Activity启动后,View就不会悬浮在上面了。
请注意,如果您在新Activity中需要使用相同的View,您需要在新Activity中重新创建并添加View。
阅读全文