有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何更改以不同显示大小显示片段的方式?

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

此时,我的所有片段都有一个活动,这导致我在更改页面时替换fragments,但对于平板电脑,我希望在该activity内显示2个片段

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

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

    <LinearLayout
        安卓:orientation="horizontal"
        安卓:layout_width="match_parent"
        安卓:layout_height="match_parent">

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

</LinearLayout>

</安卓.support.constraint.ConstraintLayout>

片段容器位于主活动的小版本中

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


共 (2) 个答案

  1. # 1 楼答案

    有关更多详细信息,请参阅本文件:https://developer.android.com/training/multiscreen/screensizes

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

    &13; 第13部分,;
    <resources>
            <item name="activity_masterdetail" type="layout">@layout/layout_with_single_fragment</item>
         </resources>
    和#13;
    和#13;
    • 现在需要创建一个替代资源,以便活动\u masterdetail别名将指向带有两个\u片段的布局\u。大型设备上的xml。 创建具有相同名称refs的新文件。xml,但在可用限定符下具有最小屏幕宽度的资源限定符。使用600dp或更大的最小尺寸(sw600dp限定符)

    &13; 第13部分,;
    <resources>
    <item name="activity_masterdetail" type="layout">@layout/layout_with_two_fragment</item>
    </resources>
    和#13;
和#13;

您在这里的目标是使逻辑工作如下:

  • 对于小于指定大小的设备,如移动电话,请使用布局\u和\u单个\u片段。xml
  • 对于超过指定大小的设备,请使用带有两个片段的布局。xml

    • 现在,在显示列表的man活动中,使用setContentView(R.layout.activity\u masterDetail),即引用布局的名称

    • 如果此代码将在手机上运行,则正常参考。xml文件将由activity_MasterDetail引用,但如果此代码在平板电脑上运行,则资源限定引用。将使用xml文件

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

    if(findViewById(R.id.a_片段)==null) { 意图=一项活动。newIntent(这个,listItem.getId()); 星触觉(意向); }

    否则 { 片段newDetail=B_片段。newInstance(list_item.getId()); getSupportFragmentManager()。beginTransaction() .替换(R.id.b_片段,新细节) .commit(); }

  • # 2 楼答案

    link之前,您应该先看一看这一点。它肯定会帮助您了解有关支持不同屏幕大小的更多信息

    这里有一个example你可以试试