第十七章 双版面主从界面
大屏幕尺寸设备的布局
- 使用别名资源
可以在res/Value 目录下new ->Value resource file, 通过设置smallest screen width中的大小设置最小宽度。当屏幕的最小尺寸大于该尺寸时,即使用当前布局。
<resources>
<item name="activity_masterdetail" type="layout">
@layout/activity_fragment
</item>
</resources>
<resources>
<item name="activity_masterdetail" type="layout">
@layout/activity_twopane
</item>
</resources>
- 在指定双屏幕的布局时,可通过设置一个LinearLayout并在其下设置两个FragmentLayout来分割屏幕
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="?android:attr/dividerHorizontal" //指明分割的方式
android:orientation="horizontal"
android:showDividers="middle">
<FrameLayout
android:id="@+id/fragment_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"> //分割的比例,与下面的相对应
</FrameLayout>
<FrameLayout
android:id="@+id/detail_fragment_container"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="3">
</FrameLayout>
</LinearLayout>
实现回调接口函数
- 定义回调接口
public interface Callbacks{
void onCrimeSelected(Crime crime);
}
- 托管该fragment的activity都必须实现该接口,并编写相应的功能
@Override
public void onCrimeUpdated(Crime crime) {
CrimeListFragment fragment = (CrimeListFragment) getSupportFragmentManager()
.findFragmentById(R.id.fragment_container);
fragment.updateUI();
}
@Override
public void onCrimeUpdated(Crime crime) {
}
使用回调接口
- 定义类型为Callbacks接口的成员变量
- 在fragment的生命周期中进行赋值和移除
@Override
public void onAttach(Context context) {
super.onAttach(context);
mCallbacks = (Callbacks) context;
}
@Override
public void onDetach() {
super.onDetach();
mCallbacks = null;
}
- 使用回调接口方法
mCallbacks.onCrimeUpdated()
挑战练习
- 添加滑动删除功能(使用ItemTouchHelper)