将屏幕分为SurfaceView和xml布局

时间:2018-11-01 18:05:10

标签: android android-layout surfaceview

MyActivity的{​​{1}}覆盖了所有屏幕。

我想将屏幕分为两部分:屏幕的前 2/3 必须由setContentView(MySurfaceView)占据,而最后的 1/3 通过MySurfaceView

我该怎么做?谢谢。

enter image description here

编辑

感谢您的回答,但我没有如何在我的情况下应用它们。要明确的是,这些是我的对象:

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:2)

解决方案:

要在布局中附加 xml 文件,可以使用<include>标签。

重用布局特别强大,因为它允许您创建可重用的复杂布局。例如,是/否按钮面板或带有描述文本的自定义进度栏。 More

借助ConstraintLayout,您可以具有问题中所示的功能。当然,有些解决方案使用旧版<LinearLayout>并称为 weights (权重),但警告显示 Weights for performance()。

为什么权重不利于表现?

  

布局权重要求对小部件进行两次测量。当权重为非零的LinearLayout嵌套在权重为非零的另一个LinearLayout中时,度量的数量将呈指数增长。

因此,让我们使用<ConstraintLayout>继续解决问题。

比方说,我们有一个名为my_activity_layout.xml的布局文件,我们使用下面的代码来实现我们想要的:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <SurfaceView
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toTopOf="@+id/guideline"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <android.support.constraint.Guideline
        android:id="@+id/guideline"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        app:layout_constraintGuide_percent="0.67" />

    <include
        android:id="@+id/news_title"
        layout="@layout/my_activity_layout"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/guideline" />

</android.support.constraint.ConstraintLayout>

您可以看到Guideline帮助我们获得了2/3,即屏幕的66.666〜67%,然后您可以使用SurfaceView标签来约束<include>和布局关于您的活动。

您还可以看到所需结果:

Desired Result

您可以复制粘贴该解决方案,然后查看其是否按预期工作。

答案 1 :(得分:0)

您可以使用线性布局并为校正比率指定布局权重来解决此问题。

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

    <SurfaceView
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="2"/>

    <include layout="my_activity_layout.xml" 
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"/>

</LinearLayout>