Search code examples
javaandroidsurfaceview

How to change SurfaceView width and height?


I have a SurfaceView in ConstraintLayout.
I changed SurfaceView width and height, but only height is changed.

How to change SurfaceView width?

this is my activity.xml.

    <android.support.constraint.ConstraintLayout
      xmlns:android = "http://schemas.android.com/apk/res/android"
      xmlns:tools = "http://schemas.android.com/tools"
      android:layout_width = "match_parent"
      android:layout_height = "match_parent"
      xmlns:app = "http://schemas.android.com/apk/res-auto"
      tools:context = ".MainActivity"
    >
    <SurfaceView
        android:id="@+id/surface_play"
        android:layout_width = "0dp"
        android:layout_height = "200dp"
        app:layout_constraintTop_toTopOf ="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"        />

    <Button
        android:id="@+id/btn_play"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:text="play"
        app:layout_constraintTop_toBottomOf="@+id/surface_play"
        app:layout_constraintStart_toStartOf="parent"        />

    <Button
        android:id="@+id/btn_stop"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        app:layout_constraintTop_toTopOf="@+id/btn_play"
        app:layout_constraintStart_toEndOf="@+id/btn_play"        
        android:text="stop"        />    
</android.support.constraint.ConstraintLayout>

this is surfaceChangedMethod.

     @Override
    public void surfaceChanged ( SurfaceHolder holder , int format , int width , 
    int height ) {

    android.view.ViewGroup.LayoutParams lp = surfaceView.getLayoutParams();
    lp.width = 1000; // required width
    lp.height = 1000; // required height
    surfaceView.setLayoutParams(lp);
}

Solution

  • I solve myself. Change a SurfaceView's attribute

    android:layout_width = "0dp"
    

    to

    android:layout_width = "wrap_content" 
    

    than it works.