1

Я пытаюсь использовать SurfaceView. Поэтому я создал виджет SurfaceView в файле макета, как показано ниже в коде. Проблема в том, как установить вес SurfaceView? Как показано ниже в коде я поставил:Как заставить SurfaceView занять конкретную секцию экрана

android:layout_weight=".4" 

, но по-прежнему SurfaceView занимает экран eintire, что я хочу сделать SurfaceView занимает только 40% экрана. Я также ссылался на сообщение в этой ссылке SurfaceView in Layout , но он не показывает, как установить вес SurfaceView из XML-файла.

Пожалуйста, дайте мне знать, как установить вес SurfaceView из XML-файла.

код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.surfaceview_00.MainActivity"> 

<SurfaceView 
    android:id="@+id/mainActivity_surfaceView" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight=".4"/> 
</RelativeLayout> 

обновление:

Я также попытался код ниже, но все же я получил один SurfaceView, который занимает весь экран. Я ожидал, что после запуска ниже код, чтобы иметь два SurfaceViews каждый занимает половину экрана, но я получил только один

код:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_main" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.example.surfaceview_00.MainActivity"> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    android:weightSum="2"> 

    <SurfaceView 
     android:id="@+id/mainActivity_SurfaceView1" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1" /> 

    <SurfaceView 
     android:id="@+id/mainActivity_SurfaceView2" 
     android:layout_width="match_parent" 
     android:layout_height="0dp" 
     android:layout_weight="1"/> 
</LinearLayout> 

</RelativeLayout> 
+0

«но все же у меня есть один SurfaceView, который занимает весь экран». Откуда вы знаете, есть только один SurfaceView? –

+0

@ Code-Apprentice, потому что я указал в коде, приведенном в разделе обновления выше. У меня есть два вида поверхности внутри linearlayout, и каждому из них присваивается layout_weoght = .5, а во время выполнения i появляется только одно представление поверхности, и оно занимает весь экран – user2121

ответ

1

android:layout_weight используется только LinearLayout. Поскольку вы используете RelativeLayout, он игнорируется.

+0

ok, но как заставить SurfaceView занять определенную часть экран, а не весь экран? – user2121

+0

@ user2121 Что вы подразумеваете под «определенной частью экрана»? –

+0

Как я упомянул в своем вопросе, я хочу, чтобы SurfaceView занимал, например, 50% «половину экрана» – user2121

2

RelativeLayout не поддерживает layout_weight. Для этого вам нужно использовать LinearLayout.

Подробнее на https://developer.android.com/guide/topics/ui/layout/linear.html

Но в принципе изменить его на что-то так:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_main" 
     android:layout_width="match_parent" 
     android:orientation="vertical" 
     android:layout_height="match_parent" 
     android:weightSum="1"> 

     <SurfaceView 
       android:id="@+id/mainActivity_surfaceView" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_weight=".4"/> 

</LinearLayout> 
+0

, пожалуйста, прикрепите в разделе обновления выше – user2121

+0

@ user2121 Пожалуйста, прочитайте ссылку, приведенную в этом ответе. –

0

SurfaceView не принадлежит иерархии видов приложения. Он создает отдельный слой на фоне и позиционирует его в зависимости от его размера. Все остальные виды отображаются поверх SurfaceView. Чтобы сделать то, что вы хотите, вам нужно использовать TextureView.

+0

@ user2121 Ответ был полезен? –

Смежные вопросы