如何显示包含自定义SurfaceView的Fragment

时间:2013-02-15 14:26:26

标签: android android-layout android-fragments surfaceview

以下设置不起作用,是否有人知道原因(我似乎无法在片段中找到自定义曲面视图的示例)。

我的surfaceView类目前只是空洞的:

class MySurfaceView extends SurfaceView implements Runnable{

public MySurfaceView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

@Override
public void run() {
    // TODO Auto-generated method stub

}



}

片段的我的XML看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout2"
    android:layout_width="500dp"
    android:layout_height="600dp"
    android:layout_gravity="fill"
    android:background="#000000" >


    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button" />


    <com.example.android.fragments.MySurfaceView
        android:id="@+id/surfaceview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>


    </LinearLayout>

然后在OnCreateView上的实际Fragment本身中我调用:

  return inflater.inflate(R.layout.article_view, container, false);

为什么这不会挂在一起的任何想法?

它与XML有关,因为当我这样做时

<SurfaceView
    android:id="@+id/surfaceview"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"/>

然后它工作正常。

2 个答案:

答案 0 :(得分:1)

如果您只想在片段中显示自定义SurfaceView('MySurfaceView'),那么只需执行以下操作:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return new MySurfaceView(getActivity());
    }

答案 1 :(得分:0)

如果你检查答案很简单:

http://developer.android.com/guide/components/fragments.html#Creating

你会看到在onCreateView上你应该返回用于呈现片段的视图

@Override
    public View onCreateView( String name , Context context , AttributeSet attrs )
    {
        // TODO Auto-generated method stub
        return super.onCreateView( name , context , attrs );
    }

你应该返回View,所以基本上你应该回到那里

MySurfaceView

//修改

public MySurfaceView ( Context context , AttributeSet attrs , int defStyle )
    {
        super( context , attrs , defStyle );
        // TODO Auto-generated constructor stub
    }

    public MySurfaceView ( Context context , AttributeSet attrs )
    {
        super( context , attrs );
        // TODO Auto-generated constructor stub
    }

    public MySurfaceView ( Context context )
    {
        super( context );
    }

尝试实现此视图的所有3个构造函数