如何更改以不同显示尺寸显示片段的方式?
Posted
技术标签:
【中文标题】如何更改以不同显示尺寸显示片段的方式?【英文标题】:How can I change the way I display the fragments in differents display sizes? 【发布时间】:2019-05-25 13:36:19 【问题描述】:我目前正在为android
设备制作应用程序,我想知道如何更改以不同显示尺寸(例如平板电脑)显示fragments
的方式。
此时我的所有片段都有一个活动,这导致我在更改页面时替换fragments
,但对于平板电脑,我想在activity
中显示2 个片段。
我为我的主要活动创建了一个布局大的版本:
<?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_
android:layout_
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".PaginaInicial"
tools:showIn="@layout/app_bar_pagina_inicial">
<LinearLayout
android:orientation="horizontal"
android:layout_
android:layout_>
<fragment
class="pt.ipp.estg.schoolhelperapp.apontamento.ListaApontFragment"
android:id="@+id/a_fragment"
android:layout_weight="1"
android:layout_
android:layout_ />
<fragment
class="pt.ipp.estg.schoolhelperapp.apontamento.VerApontFragment"
android:id="@+id/b_fragment"
android:layout_weight="2"
android:layout_
android:layout_ />
</LinearLayout>
</android.support.constraint.ConstraintLayout>
片段容器位于主要活动的布局小版本中。
其中一个片段显示项目列表(@+id/a_fragment)
,另一个显示我之前选择的一个特定项目的信息(@+id/b_fragment)
。
【问题讨论】:
【参考方案1】:更多详情请参考本文档:https://developer.android.com/training/multiscreen/screensizes
在 res/values/refs.xml 中创建一个默认别名资源值文件,并将以下代码放入其中。此值将引用您的布局文件,该文件只有一个片段。<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 活动中,使用 setContentView(R.layout.activity_masterDetail) 即引用布局的名称
如果此代码将在手机上运行,则activity_masterDetail会引用普通的refs.xml文件,但如果此代码在平板电脑上运行,则会使用资源限定的refs.xml文件。
在您的活动逻辑中,您希望在表格的同一屏幕上显示主布局和详细布局,但在手机上打开另一个活动,请在列表项的 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();
【讨论】:
【参考方案2】:您应该在link 之前查看此内容,它应该可以帮助您了解更多关于支持不同屏幕尺寸的信息。
这里有一个example,你可以试试。
【讨论】:
我已经尝试使用文档中的内容,但它不适用于我的情况。我现在在我的活动的布局大版本上收到 android.view.InflateException。 您是否尝试过示例链接中的示例应用程序? 是的,我的应用有点复杂,所以我正在尝试不同的方法,但是这个简单的话题让我很头疼, 我的意思是不要直接在您的应用程序上尝试,只需在链接中尝试那么简单下载项目并运行它,您可能会了解您的应用程序有什么问题或缺少什么 我做到了,但我有一个更大的问题,我所有的片段都在使用这种类型的布局,但我只是想要其中一些关于如何做到这一点的想法?更改片段时更改布局类型?以上是关于如何更改以不同显示尺寸显示片段的方式?的主要内容,如果未能解决你的问题,请参考以下文章