好的,我正在尝试创建一个通用应用程序,该应用程序在手机视图中显示 3 个选项卡,在平板电脑视图中显示 3 个列。因此,我使用线性布局创建了几个不同的 XML 布局。
但是,使用片段时,我遇到了一个问题 - 我想在该片段中进行选择时删除最左边的列。我相信我可以做到这一点,但事实证明我无法删除在 XML 中声明的片段。所以现在,我尝试在 XML 中创建中间列和右列:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/menu_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<fragment
android:id="@+id/classification_fragment"
android:name="uk.colessoft.android.hilllist.fragments.MenuClassificationFragment"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
tools:layout="@layout/list_classifications" >
</fragment>
<fragment
android:id="@+id/map"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
class="com.google.android.gms.maps.SupportMapFragment" />
</LinearLayout>
然后使用添加第一列
FragmentManager fragmentManager = getSupportFragmentManager();
android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
MenuCountryFragment countryFragment=new MenuCountryFragment();
fragmentTransaction.add(R.id.menu_layout, countryFragment, "country_menu").commit();
但我有两个问题:
a) 上面的代码只将片段放在线性布局的右侧,我无法指定位置。它必须在左边。
b) XML 让我可以自由地根据屏幕大小/方向为片段定义不同的权重。在 Fragments 中以编程方式设置布局参数似乎是一种倒退。我通过在 xml 中放置一个占位符视图来解决这个问题,我从中读取布局参数并将它们分配到 onCreateView 但它是一个hack。
我知道我可以通过将片段添加为 xml 中第一个元素的子元素来将片段放置在正确的位置,但是当我这样做并删除片段时,它会留下一个空白空间。