【问题标题】:Single-pane to Two-pane单窗格到两窗格
【发布时间】:2023-03-20 06:18:01
【问题描述】:

我正在处理一个 Android 项目,但遇到了两窗格布局(列表 + 详细信息)的问题。

当前状态:

  • 适用于宽度大于 600dp 和横向的屏幕的双窗格布局(如在 GMail-App 中)。
  • 从两窗格切换到单窗格布局有效
  • 适用于在任何方向上宽度小于 600dp 的设备的单窗格布局。

问题:

如果用户(设备屏幕宽度大于 600dp)处于纵向模式并选择列表项,则会弹出详细视图(这是正确的)。如果用户现在将方向更改为横向,则布局应更改为包含列表和所选详细视图的两窗格布局。但该应用程序仍处于单窗格布局中。

在我看来,问题是因为我在单窗格模式下开始一个新活动而不是交换一些片段。但我真的不知道如何实现这一点。

以下代码显示了如果用户选择列表项会发生什么。

@Override
public void onItemSelected(AndroidCalendar calendar) {
    if (mTwoPane) {
        // two-pane mode
        Bundle arguments = new Bundle();
        arguments.putSerializable(CalendarDetailFragment.CALENDAR, calendar);
        CalendarDetailFragment fragment = new CalendarDetailFragment();
        fragment.setArguments(arguments);
        getFragmentManager().beginTransaction()
                .replace(R.id.calendaritem_detail_container, fragment)
                .commit();

    } else {
        // single-pane mode
        Intent detailIntent = new Intent(this, CalendarDetailActivity.class);
        detailIntent.putExtra(CalendarDetailFragment.CALENDAR, calendar);
        startActivity(detailIntent);
    }

例如 Boxer 应用程序 (EMail) 和 gReader 支持此行为。我也认为是 GMail 应用程序。

【问题讨论】:

    标签: android android-layout android-fragments


    【解决方案1】:

    您可以通过为您的应用使用抽屉式导航方案来完成您想要的行为。由于最终布局的两个部分(抽屉和细节)都是片段,因此您可以让一个布局像正常的导航抽屉一样工作,它可以来回滑动。然后在您的平板电脑布局中使片段不滑动,并且永久可见。在您的主要活动中,您可以实现逻辑以查看屏幕尺寸并推断其是否为平板电脑。然后您将拥有一个动态布局,而无需创建不同的活动。

    我还会查看this 指南。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-17
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      相关资源
      最近更新 更多