我正在使用 commonsware 创建的库来制作一个简单的相机应用程序。在自述文件中有一节说明了这一点:
您可以继承 CameraFragment 并覆盖 onCreateView()。链接到超类以获取 CameraFragment 自己的 UI,然后将其与其他小部件一起包装在您自己的容器中,并从您的 onCreateView() 返回组合的 UI。
我对 Android Fragments 仍然不是很好,所以我希望有人能更好地向我解释这一点。
我有两个活动(A,B),一个片段(CamFragment)和两个布局(A,B)。我的第一个活动 (A) 加载具有单个按钮和 imageView 的布局 (A)。该按钮启动第二个活动 (B),它使用第二个布局 (B) 加载片段 (CamFragment)。第二个布局取自演示应用程序:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
tools:ignore="MergeRootFrame"/>
所以,现在在我的应用程序中,我想要一个相机片段/第二个活动上的按钮,它将在点击图片()。按照自述文件中的说明,我需要先继承 CameraFragment 的子类。这很容易,我只是这样做:
public class CamFragment extends CameraFragment {
接下来,我必须重写 onCreateView。再一次,就像在 v9 演示中一样,这是一个微不足道的任务。
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
setHasOptionsMenu(true);
setHost(new DemoCameraHost(getActivity()));
}
下一部分是我真正感到困惑的地方,希望有人能提供帮助。
链接到超类以获取 CameraFragment 自己的 UI,然后将其与其他小部件一起包装在您自己的容器中,并从您的 onCreateView() 返回组合的 UI。
我只是不完全确定这意味着/意味着什么。如果有一个演示,展示一个没有 actionBar 的自定义相机 UI,那就太棒了,因为我觉得大多数开发人员不会将控件放入操作栏中。
编辑#1:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View uiFromParent=super.onCreateView(inflater, container, savedInstanceState);
View yourUi = inflater.inflate(R.layout.main_cam, container, false);
View theThingThatWillHoldThePreview = yourUi.findViewById(R.id.holder); // or whatever
((ViewGroup) theThingThatWillHoldThePreview).addView(uiFromParent); // with some appropriate LayoutParams
return super.onCreateView(inflater, container, savedInstanceState);
}
main_cam.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<FrameLayout
android:id="@+id/holder"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_weight="1"
android:background="@color/abs__bright_foreground_holo_dark"
android:keepScreenOn="true"
tools:ignore="MergeRootFrame" >
</FrameLayout>
<ImageButton
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="10dp"
android:background="@color/abs__bright_foreground_holo_dark"
android:src="@drawable/ic_launcher"
android:text="Capture" />
</RelativeLayout>
cam_fragment.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="MergeRootFrame"/>