Android 项目必备(四十二)-->Android 多窗口模式

时间:2025-01-28 09:31:41
public class MainActivity extends AppCompatActivity { private static final int WINDOWING_MODE_FREEFORM = 5; @SuppressLint("MissingInflatedId") @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_main); findViewById(R.id.btn_open_one).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showWindows("",""); } }); findViewById(R.id.btn_open_two).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { showWindows("",""); } }); } private void showWindows(String packageName,String classPath) { //获取屏幕高宽 DisplayMetrics metric = new DisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); int screenWidth = metric.widthPixels; int screenHeight = metric.heightPixels; Intent intent = new Intent(); intent.setClassName(packageName,classPath); intent.setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK); ActivityOptions activityOptions = null; if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { activityOptions = ActivityOptions.makeBasic(); } //设置为freeform模式 try { Method method = ActivityOptions.class.getMethod("setLaunchWindowingMode", int.class); method.invoke(activityOptions, WINDOWING_MODE_FREEFORM); } catch (Exception e) { e.printStackTrace(); } //freeform模式下*窗口的大小 int freeformWidth = 1200; int freeformHeight = 800; //居中显示 int left = screenWidth / 2 - freeformWidth / 2; int top = screenHeight / 2 - freeformHeight / 2; int right = screenWidth / 2 + freeformWidth / 2; int bottom = screenHeight / 2 + freeformHeight / 2; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { activityOptions.setLaunchBounds(new Rect(left,top,right,bottom)); } Bundle bundle = activityOptions.toBundle(); startActivity(intent,bundle); } }