Как я могу выровнять два представления EditText, если я не знаю объем текста заранее для обоих представлений? - PullRequest
1 голос
/ 10 июня 2011

У меня есть два представления EditText, высоту которых я хочу выровнять. Проблема в том, что я не могу предсказать, в каком представлении будет больше текста, и поэтому использование android:layout_alignTop и android:layout_alignBottom не будет работать. Схема, с которой я экспериментирую, приведена ниже. Я уже пробовал android:layout_alignTop и android:layoutAlignBottom, но они не дают удовлетворительных результатов.

Макет 1

<?xml version="1.0" encoding="utf-8"?>

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

<EditText
        android:id="@+id/text1" 
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"           
        android:padding="5dip"

        android:text="Text 1 bvhg hbjbj kjkbkj kjnjkn hlihj lklkkl"
        />

<EditText
        android:id="@+id/text2" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/text1"           
        android:padding="5dip"

        android:text="Text 2 lasndklsa lkmsclslk klmsldmlk lksdl"
        />


</RelativeLayout>

Рисунок для макета 1 : http://imgur.com/P6KV7.png

Макет 2 с android:layout_alignTop и android:layout_alignBottom

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<EditText
        android:id="@+id/text1" 
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"   
        android:layout_alignTop="@+id/text2"
        android:layout_alignBottom="@+id/text2"

        android:padding="5dip"

        android:text="Text 1 bvhg hbjbj kjkbkj kjnjkn hlihj lklkkl"
        />

<EditText
        android:id="@+id/text2" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/text1"           
        android:padding="5dip"

        android:text="Text 2 lasndklsa lkmsclslk klmsldmlk lksdl"
        />


</RelativeLayout>

Рисунок для макета 2 : http://imgur.com/x6fyI.png

Но, если бы я изменил текст в первом EditText, часть текста в этом поле обрезается. См. Схему 3 и Рисунок 3 ниже:

Макет 3

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" 
android:layout_height="fill_parent">

<EditText
        android:id="@+id/text1" 
        android:layout_width="200dip"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"   
        android:layout_alignTop="@+id/text2"
        android:layout_alignBottom="@+id/text2"

        android:padding="5dip"

        android:text="Text 1 bvhg hbjbj kjkbkj kjnjkn hlihj lklkkl
                    1 bvhg hbjbj kjkbkj kjnjkn hlihj lklkkl    ncksjcksn
                    lkslksldcsdc
                    the end"
        />

<EditText
        android:id="@+id/text2" 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@+id/text1"           
        android:padding="5dip"

        android:text="Text 2 lasndklsa lkmsclslk klmsldmlk lksdl"
        />


</RelativeLayout>

Рисунок 3 для макета 3 : (Извините, из-за проблем с повтором не могу опубликовать более двух гиперссылок.)

Есть ли способ выровнять высоты представлений EditText, если объем текста в обоих представлениях заранее не известен?

1 Ответ

1 голос
/ 10 июня 2011

Ну, я должен сказать, это первый раз, когда я нашел полезным использование TableLayout. Обратите внимание на текст LOOKS, обрезанный в предварительном просмотре (поскольку он действительно большой), но когда вы скомпилируете и запустите, вы увидите, что текст можно прокручивать. TableView делает все сложные вещи для вас. Я думаю, что это будет работать для вас.
Просто осознал, что вы хотите, чтобы текстовые представления выглядели одинаково, а это просто - дайте им прозрачный фон и сделайте фон таблицы фоновым. РЕДАКТИРОВАТЬ - Еще одна вещь - из-за ошибки в структуре, мне пришлось использовать это:

android:inputType="none"
android:editable="false"

, чтобы получить текст как прокручиваемый, так и не редактируемый. Кроме того, хороший момент от @mandel - используйте «fill_parent», а не «match_parent», если программирование для устройств Android с уровнем API ниже 8.

<TableLayout
    android:id="@+id/tableLayout1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <TableRow
        android:layout_height="fill_parent"
        android:layout_width="wrap_content"
        android:id="@+id/tableRow1"
        android:gravity="center_vertical">
        <EditText
            android:inputType="none"
            android:editable="false"
            android:text="I have two EditText to align. The problem is that I cannot predict which view will have more tetText to align. The problem is that I cannot predict which view will have more text and hencem  I have two EditText views whose height I wish to align. The problem is that I cannot predict which view will have more text and hence"
            android:id="@+id/editText1"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent">
        </EditText>
        <EditText
            android:inputType="none"
            android:editable="false"
            android:text="I have two EditText views whose height I wish to alignhave more text and hence "
            android:id="@+id/editText2"
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"></EditText>
    </TableRow>
</TableLayout>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...