java - 如何更改以不同显示尺寸显示 fragment 的方式?

标签 java android android-studio android-fragments

我目前正在为 Android 设备制作一个应用程序,我想知道如何更改以不同的显示尺寸显示 fragments 的方式(例如,平板电脑)。

此时我的所有 fragment 都有一个 Activity ,这导致我在更改页面时替换 fragments 但对于平板电脑,我想在 activity< 中显示 2 个 fragment/

我已经为我的主要 Activity 创建了一个大布局版本:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context=".PaginaInicial"
    tools:showIn="@layout/app_bar_pagina_inicial">

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            class="pt.ipp.estg.schoolhelperapp.apontamento.ListaApontFragment"
            android:id="@+id/a_fragment"
            android:layout_weight="1"
            android:layout_width="0dp"
            android:layout_height="match_parent" />
        <fragment
            class="pt.ipp.estg.schoolhelperapp.apontamento.VerApontFragment"
            android:id="@+id/b_fragment"
            android:layout_weight="2"
            android:layout_width="0dp"
            android:layout_height="match_parent" />

</LinearLayout>

</android.support.constraint.ConstraintLayout>

fragment 容器位于主要 Activity 的布局小型版本中。

其中一个 fragment 显示项目列表(@+id/a_fragment),另一个 fragment 显示我之前选择的一个特定项目的信息(@+id/b_fragment )

最佳答案

有关详细信息,请参阅此文档:https://developer.android.com/training/multiscreen/screensizes

  • 在 res/values/refs.xml 中创建一个默认别名资源值文件,并将以下代码放入其中。该值将引用只有一个 fragment 的布局文件。

<resources>
        <item name="activity_masterdetail" type="layout">@layout/layout_with_single_fragment</item>
     </resources>

  • 现在需要创建替代资源,以便 activity_masterdetail 别名在较大的设备上指向 layout_with_two_fragment.xml。 创建一个具有相同名称 refs.xml 的新文件,但在可用限定符下使用最小屏幕宽度的资源限定符。使用 600dp 或更大的最小尺寸(sw600dp 限定符)

<resources>
<item name="activity_masterdetail" type="layout">@layout/layout_with_two_fragment</item>
</resources>

你的目标是让逻辑像这样工作:

  • 对于小于指定尺寸的设备,例如手机,使用 layout_with_single_fragment.xml。

  • 对于超过指定尺寸的设备,使用 layout_with_two_fragment.xml。

  • 现在在显示列表的 man Activity 中,使用 setContentView(R.layout.activity_masterDetail) 即引用布局的名称

  • 如果此代码将在手机上运行,​​正常的 refs.xml 文件将由 activity_masterDetail 引用,但如果此代码在平板电脑上运行,将使用资源限定的 refs.xml 文件。

  • 在您的 Activity 逻辑中,如果您想在表格的同一屏幕上显示主要布局和详细信息布局,但要在手机上打开另一个 Activity ,请在列表项的 onClick() 中使用以下逻辑

    if (findViewById(R.id.a_fragment) == null) {
      Intent intent = A_Activity.newIntent(this, listItem.getId());
      startActivity(intent);
    } else {
      Fragment newDetail = B_Fragment.newInstance(list_item.getId());
      getSupportFragmentManager().beginTransaction()
          .replace(R.id.b_fragment, newDetail)
          .commit();
    }
    

关于java - 如何更改以不同显示尺寸显示 fragment 的方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53946465/

相关文章:

android - 有什么方法可以从 android 上收到的短信中获取发件人电话号码?

android - fragment 应该是静态的,这样它们可以被系统重新实例化,而匿名类不是静态的 [ValidFragment]

java - Android 将按钮或 View 保留在应用程序内所有 Activity 的前面,而不使用 baseActivity

java - 设计模式(Java): Multiple classes,相同字段集

java - 如何将 JRBeanCollectionDataSource 数据添加到 Jasper Report 的目录中?

java - 如何通过按下按钮从 android 程序堆栈中删除除第一个项目之外的所有项目?

android - 获取照片引用

java - 计数增量器错误

java - 正则表达式匹配匹配域的所有子域

android - android.view.WindowManager $ BadTokenException : Unable to add window — token android. os.BinderProxy@27773032无效;您的 Activity 正在进行吗?