【问题标题】:How to display Fragment containing custom SurfaceView如何显示包含自定义 SurfaceView 的片段
【发布时间】:2013-02-15 14:26:25
【问题描述】:

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

我的 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"/>

然后它就可以正常工作了。

【问题讨论】:

    标签: android android-layout android-fragments surfaceview


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      如果你检查,答案很简单:

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

      你会看到在 onCreateView 上你应该返回 View 来展示 Fragment

      @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 个构造函数

      【讨论】:

      • 我认为您的答案不正确,因为“要为您的片段绘制 UI,您必须从此方法返回一个视图,该视图是片段布局的根。” SurfaceView 不是根视图,它只是 XML 文档中的一个组件,因为我也有一个按钮。所以这就是我正在做的“return inflater.inflate(R.layout.article_view, container, false);”我正在膨胀并返回包含 SurfaceView 的根视图。
      猜你喜欢
      • 2023-04-01
      • 2017-01-19
      • 1970-01-01
      • 2014-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多