我目前正在为Android设备制作应用程序,我想知道如何更改以不同显示尺寸显示片段的方式(例如平板电脑).
此时我的所有片段都有一个活动,这导致我在更改页面时替换片段,但对于平板电脑,我想在该活动中显示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_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>
片段容器位于主要活动的布局 – 小版本内.
其中一个片段显示项目列表(@ id / a_fragment),另一个片段显示我之前选择的一个特定项目的信息(@ id / b_fragment).
解决方法:
有关详细信息,请参阅此文档: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(意向);
}
其他
{
Fragment newDetail = B_Fragment.newInstance(list_item.getId());
getSupportFragmentManager().的BeginTransaction()
.replace(R.id.b_fragment,newDetail)
.承诺();
}