Fragment根据屏幕用不同方式显示
-
Fragement在横竖屏显示为不同行为 原理是横屏的layout里显示一个layout而竖屏没有
-
竖屏:
<FrameLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:layout_width=”match_parent” android:layout_height=”match_parent”> <fragment class=”com.exple.testfragment.MainActivity$TitlesFragment” android:id=”@+id/titles” android:layout_width=”match_parent” android:layout_height=”match_parent”/> </FrameLayout>
-
横屏:
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android” android:baselineAligned=”false” android:orientation=”horizontal” android:layout_width=”match_parent” android:layout_height=”match_parent”> <fragment class=”com.exple.testfragment.MainActivity$TitlesFragment” android:id=”@+id/titles” android:layout_weight=”1″ android:layout_width=”0px” android:layout_height=”match_parent”/> <FrameLayout android:id=”@+id/details” android:layout_weight=”5″ android:layout_width=”0px” android:layout_height=”match_parent” android:background=”?android:attr/detailsElementBackground”/> </LinearLayout>
-
竖屏:
- 注意: 关键是那个FrameLayout(id/details) 而非fragment 这里的fragment换成listview啥的毫不影响
-
小屏的话需要再建立一个单独的activity 在oncreate里设置Fragment 假设InfoFragment是Fragment的子类
getFragmentManager().beginTransaction().add(android.R.id.content, new InfoFragment()).commit();
- 就ok了 实际使用用可以加个switch或if根据选择来创建不同的Fragment
- 下一步是显示Fragment的内容 如果是大屏 则会显示FrameLayout 需要设置R.id.details的内容为Fragment(显示方法和下面的大屏显示方法一样) 否则不管
- 然后要为选择绑定操作
- 如果是小屏:直接startActivity
- 如果是大屏:
-
首先获取目前显示中的Fragment
Fragment cur = getFragmentManager().findFragmentById(R.id.details);
-
然后对照选择判断是否需要更改Fragment 需要则新建 否则return结束操作
case 0://InfoFragment if (cur == null || !(cur instanceof InfoFragment)) { newfrag = new InfoFragment(); } else { return; }
-
用FragmentTransaction更改目前那个FrameLayout(id/details)的内容:
FragmentTransaction ft = getFragmentManager().beginTransaction(); ft.replace(R.id.details, newfrag); ft.commit();