Можно ли использовать предварительный просмотр камеры и TextView на одном экране? - PullRequest
3 голосов
/ 27 сентября 2011

Мне было интересно, есть ли какой-нибудь способ предварительного просмотра камеры заполнить часть экрана, а внизу есть текстовое поле, в которое я могу добавить текст позже. У меня пока нет кода, потому что моя команда все еще оценивает, возможно ли это вообще, прежде чем приступить к коду.

Редактировать 2: Теперь я наконец смог увидеть текст на экране после игры с Android: гравитация. Но TextView всегда отображается вверху экрана, есть ли способ переместить его вниз?

Редактировать 3: Изменение android: layout_height на fill_parent вместо wrap_content устраняет проблему позиционирования

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent">
      <SurfaceView android:id="@+id/preview_view"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:layout_centerInParent="true"/>
      <com.google.zxing.client.android.ViewfinderView
           android:id="@+id/viewfinder_view"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:background="@color/transparent"/>
      ........
      ........
      <TextView android:layout_width="fill_parent"
           android:layout_height="fill_parent"
           android:gravity="bottom" 
           android:text="Header text"/>

</FrameLayout>

Ответы [ 3 ]

2 голосов
/ 27 сентября 2011

Да, это возможно.Вы должны использовать FrameLayout для этого.Вот пример:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="fill_parent"
             android:layout_height="fill_parent">

  <SurfaceView android:id="@+id/preview_view"
               android:layout_width="fill_parent"
               android:layout_height="fill_parent"
               android:layout_centerInParent="true"/>

  <TextView android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:gravity="top|center_horizontal" 
            android:text="Header text"/>

</FrameLayout>
1 голос
/ 27 сентября 2011

да, это возможно так:

<?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" >

  <android.view.SurfaceView
  android:id="@+id/surface"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" />

<TextView
    android:id = "@+id/txtview"
    android:layout_width = "wrap_content"
    android:layout_height = "wrap_content"
    android:text = "TextView"
    android:padding = "7dp"
    android:gravity = "bottom" />

</FrameLayout>
0 голосов
/ 02 июля 2019

Благодаря сообщениям в этой теме, здесь есть вариант с использованием простого LinearLayout, который ограничивает размер дисплея камеры .

Это уменьшает размер "сканирующего квадрата"

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_horizontal"
    android:background="@color/sea_blue_green_dark"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="30dp"
        android:padding="10dp"
        android:textColor="@color/white"
        android:textSize="28sp"
        android:text="Scan Code Now"/>

    <me.dm7.barcodescanner.zxing.ZXingScannerView
        android:id="@+id/scanner"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:background="@color/white"/>

    <!--
    Add this view to prevent camera from taking up remaining vertical space

    Although seems to be better UX when user can still see camera outside of "Scanner Box Target". 
    Leaving here for reference
    -->
    <View
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#8BC34A"/>

</LinearLayout>

=======

Это создаст следующий макет, где белый блок станет областью камеры:

enter image description here

...