Проблема с ScrollView при применении отступов или layout_margin

В моем файле макета xml у меня есть ScrollView. Раньше я использовал вес для разделения TextView в каждом TableRow, но это не удовлетворяло мои потребности, поэтому я решил использовать столбцы в TableLayout.

Моя проблема заключается в том, что когда я пытаюсь применить дополнение к ScrollView или RelativeLayout «Контейнера», некоторый текст обрезается. Если я обращаюсь к любому дочернему элементу ScrollView, он не показывает самую нижнюю часть TableLayout. Ближе всего к тому, что я хочу, я применил отступы только к TableRows в TableLayout, но текст «Версия сборки» обрезается по горизонтали (см. снимок экрана ниже). В остальном это было бы удовлетворительно.

layout.xml

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

<ScrollView
    android:id="@+id/svMain"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_above="@+id/adMainBanner"
    android:layout_alignParentTop="true"
    android:fillViewport="true" >

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <!-- Build -->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:gravity="center_horizontal"
            android:text="@string/build"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/manufacturer" />

            <TextView
                android:id="@+id/tvManufacturer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/model" />

            <TextView
                android:id="@+id/tvModel"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/hardware" />

            <TextView
                android:id="@+id/tvHardware"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/board" />

            <TextView
                android:id="@+id/tvBoard"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/bootloader" />

            <TextView
                android:id="@+id/tvBootLoader"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/device" />

            <TextView
                android:id="@+id/tvDevice"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/brand" />

            <TextView
                android:id="@+id/tvBrand"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/android_version" />

            <TextView
                android:id="@+id/tvAndroidVersion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/build_version" />

            <TextView
                android:id="@+id/tvBuildVersion"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <!-- Service / Carrier -->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:gravity="center_horizontal"
            android:text="@string/carrier_service"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/carrier" />

            <TextView
                android:id="@+id/tvCarrier"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/phone_number" />

            <TextView
                android:id="@+id/tvPhoneNumber"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/service_mode" />

            <TextView
                android:id="@+id/tvServiceMode"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <!-- Network -->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:gravity="center_horizontal"
            android:text="@string/network"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/phone_type" />

            <TextView
                android:id="@+id/tvPhoneType"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/network_type" />

            <TextView
                android:id="@+id/tvNetworkType"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <TableRow android:layout_width="match_parent" >

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="0"
                android:text="@string/baseband" />

            <TextView
                android:id="@+id/tvBaseBand"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_column="1"
                android:text="text" />
        </TableRow>

        <!-- CPU -->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:gravity="center_horizontal"
            android:text="@string/cpu_info"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tvCpuInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:text="text" />

        <!-- Ram -->
        <!-- If I apply padding/margin to any container layout,
             this gets cut off(does not show in scrollview)-->

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="15dp"
            android:layout_marginTop="15dp"
            android:gravity="center_horizontal"
            android:text="@string/ram_info"
            android:textSize="18sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/tvRamInfo"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_column="0"
            android:text="text" />
    </TableLayout>
</ScrollView>

<com.google.ads.AdView
    xmlns:googleads="http://schemas.android.com/apk/lib/com.google.ads"
    android:id="@+id/adMainBanner"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    googleads:adSize="SMART_BANNER"
    googleads:adUnitId="@string/admob_banner_id"
    googleads:loadAdOnCreate="true" />

</RelativeLayout>

Скриншоты

Как это выглядит без отступов и полей, версия сборки обрезана: Как это выглядит без  любые отступы или поля, версия сборки обрезана

А это вся версия сборки: Это вся версия сборки

Почему текст версии сборки не переносится на новую строку? После того, как я этого добьюсь, как мне применить отступы/поля ко всему моему файлу макета, не прерывая что-то внутри ScrollView? Любая помощь, пожалуйста, это очень ценится :)


person MattMatt    schedule 21.01.2014    source источник
comment
Попробуйте переключить android:layout_width="wrap_content" на android:layout_width="match_parent" для android:id="@+id/tvBuildVersion" TextView. Можете ли вы прокручивать по горизонтали? Кроме того, я бы применил поля к TableLayout или отступы к ScrollView.   -  person BVB    schedule 22.01.2014
comment
Если я перейду на match_parent, текст вообще не будет переноситься. Нет, это вертикальный ScrollView, поэтому нет горизонтальной прокрутки. и, как указывалось ранее, когда я делаю именно то, что вы указали с отступом/маржем, самый последний TextView в макете не отображается.   -  person MattMatt    schedule 22.01.2014
comment
Теперь все работает, спасибо за помощь   -  person MattMatt    schedule 22.01.2014


Ответы (1)


может быть, потому что он не содержит пробелов. Попробуйте с:

android:singleLine="false"

or

android:ems="30" // or whatever number of characters you want per line
person Pablo_Cassinerio    schedule 21.01.2014
comment
Спасибо, но если вы посмотрите на 1-е изображение, оно в конечном итоге переносится, просто не тогда, когда должно. Я пробовал это без успеха. Это строка, полученная android.os.Build.FINGERPRINT, и, похоже, это единственный TextView, который вызывает у меня проблемы с этим. Любые другие заворачиваются нормально :( - person MattMatt; 22.01.2014
comment
Я думаю, вы что-то поняли, в документах указано, что нельзя пытаться анализировать значение, возвращаемое android.os.Build.FINGERPRINT, вы думаете, что это может быть так? РЕДАКТИРОВАТЬ: вы правы, я считаю, что это действительно так, потому что пробелов нет. android:maxEms делает свое дело, немного небрежно, но что поделаешь... Спасибо, ПРИНЯТО! - person MattMatt; 22.01.2014
comment
Будьте осторожны — это затруднит поддержку экранов разных размеров. Просто потому, что экран x отлично вмещает 30 символов, экран y может не соответствовать. - person BVB; 22.01.2014
comment
Нет проблем, рад, что это сработало. Но также, как говорит BVB, вы должны быть осторожны с совместимостью экрана. - person Pablo_Cassinerio; 22.01.2014