如何在Android上使用my SurfaceView with main.xml?
在我项目的主要课程中,我有如何在Android上使用my SurfaceView with main.xml?,android,xml,surfaceview,Android,Xml,Surfaceview,在我项目的主要课程中,我有 public class MyClass extends Activity{ public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); mySurfaceView = new MySurfaceView(this); setContentView(mySurfaceView); ...
public class MyClass extends Activity{
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
mySurfaceView = new MySurfaceView(this);
setContentView(mySurfaceView);
...
}
class MySurfaceView extends SurfaceView implements Runnable{
...
}
}
我想在这个程序中添加按钮和控制盘,我现在在一个单独的小程序中有一个main.xml文件。我知道要访问它,我必须有一行setContentView(R.layout.main),但随后,我将无法访问我的SurfaceView。我怎样才能做到两者兼得?我在网上看到了一些关于添加带有FrameLayout的几行的内容,但我不知道在哪里,我尝试将其粘贴在main.xml的各个位置,但这只会导致整个程序崩溃
目前,my main.xml如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/selectButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Select Time Interval"
android:onClick="selfDestruct"
/>
<Button android:id="@+id/finishButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Done"
android:visibility="gone"
android:onClick="selfDestruct"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top|left"
android:paddingLeft="12dp"
android:paddingRight="12dp"
>
<kankan.wheel.widget.WheelView android:id="@+id/startHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"/>
<kankan.wheel.widget.WheelView android:id="@+id/startMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/startAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<TextView android:id="@+id/theWordTo"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:text=" to "/>
</LinearLayout>
<kankan.wheel.widget.WheelView android:id="@+id/endHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"
/>
<kankan.wheel.widget.WheelView android:id="@+id/endMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/endAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<kankan.current.app.MyClass.MySurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surfaceView" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/selectButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Select Time Interval"
android:onClick="selfDestruct"
/>
<Button android:id="@+id/finishButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Done"
android:visibility="gone"
android:onClick="selfDestruct"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top|left"
android:paddingLeft="12dp"
android:paddingRight="12dp"
>
<kankan.wheel.widget.WheelView android:id="@+id/startHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"/>
<kankan.wheel.widget.WheelView android:id="@+id/startMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/startAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<TextView android:id="@+id/theWordTo"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:text=" to "/>
</LinearLayout>
<kankan.wheel.widget.WheelView android:id="@+id/endHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"
/>
<kankan.wheel.widget.WheelView android:id="@+id/endMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/endAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
我想您应该使用。将main.xml更改为如下所示:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/selectButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Select Time Interval"
android:onClick="selfDestruct"
/>
<Button android:id="@+id/finishButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Done"
android:visibility="gone"
android:onClick="selfDestruct"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top|left"
android:paddingLeft="12dp"
android:paddingRight="12dp"
>
<kankan.wheel.widget.WheelView android:id="@+id/startHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"/>
<kankan.wheel.widget.WheelView android:id="@+id/startMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/startAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<TextView android:id="@+id/theWordTo"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:text=" to "/>
</LinearLayout>
<kankan.wheel.widget.WheelView android:id="@+id/endHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"
/>
<kankan.wheel.widget.WheelView android:id="@+id/endMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/endAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<kankan.current.app.MyClass.MySurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/surfaceView" />
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:id="@+id/selectButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Select Time Interval"
android:onClick="selfDestruct"
/>
<Button android:id="@+id/finishButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Done"
android:visibility="gone"
android:onClick="selfDestruct"
/>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top|left"
android:paddingLeft="12dp"
android:paddingRight="12dp"
>
<kankan.wheel.widget.WheelView android:id="@+id/startHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"/>
<kankan.wheel.widget.WheelView android:id="@+id/startMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/startAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<LinearLayout
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="fill_parent" >
<TextView android:id="@+id/theWordTo"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:gravity="center"
android:text=" to "/>
</LinearLayout>
<kankan.wheel.widget.WheelView android:id="@+id/endHour"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="43dp"
/>
<kankan.wheel.widget.WheelView android:id="@+id/endMins"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<kankan.wheel.widget.WheelView android:id="@+id/endAmpm"
android:visibility="gone"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
当然可以在运行时将SurfaceView添加到布局中(例如在
onCreate()
方法中),但在XML布局中添加它可能要简单得多
为了简单起见,我首先在自己的文件中定义MySurfaceView,而不是在与MyClass活动相同的文件中。确保包含格式为MySurfaceView(Context-Context,AttributeSet-attrs)
的构造函数,以便视图可以正确膨胀。然后,只要将以下内容插入到XML布局中即可
<com.example.package.MySurfaceView
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
其中第一行是MySurfaceView的路径(
com.example.package
是包名,MySurfaceView
是您定义自定义视图的文件)。我几乎花了两天半的时间思考我是如何做到这一点的&我在谷歌搜索中找到了正确的关键字!非常感谢,先生。