XML-макет Android не работает должным образом с tablelayout и scrollview

#android #xml #scrollview #tablelayout

#Android #xml #scrollview #tablelayout

Вопрос:

РЕДАКТИРОВАТЬ: TableLayout не работает должным образом? Я вижу, большинство из вас говорят использовать относительный макет и пропустить tableview?

введите описание изображения здесь

ПРОБЕЛ после данных 1 и 2, от которых я пытался избавиться. Если я добавлю тот же XML-код без TableLayout, тогда все будет в порядке. Что мне изменить?

В 3-й строке с «100» я хотел, чтобы справа было 2 ввода textviews. Я перепробовал все, что мог придумать, и это не идет вправо. Я удалил 2-й textview, чтобы посмотреть, помогло ли это, но особой разницы не имело.

Кто-нибудь может сказать мне, что я сделал не так? Спасибо!

Вот XML:

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

 <ScrollView android:layout_width="fill_parent"
    android:layout_height="wrap_content">


    <TableLayout android:layout_width="fill_parent"
        android:stretchColumns="*" android:layout_height="fill_parent"
        android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android"
        android:padding="6px">

        <TableRow style="@style/FormRows" android:layout_marginTop="15sp">
            <Button android:layout_width="fill_parent"
                android:layout_height="wrap_content" android:layout_marginLeft="5px"
                android:layout_span="3" android:layout_weight="1" android:text="Save"
                android:id="@ id/dgSave" />
        </TableRow>



        <TableRow style="@style/FormRows">

            <TextView android:layout_width="70sp"
                android:layout_height="wrap_content" android:textSize="16sp"
                android:layout_weight="1" android:text="Data 1" />

            <Spinner android:id="@ id/dgData0" android:layout_weight="2"
                android:layout_width="wrap_content" android:layout_height="wrap_content" />

        </TableRow>



        <TableRow>

            <LinearLayout android:orientation="horizontal"
                android:layout_width="fill_parent" android:layout_height="wrap_content">

        <EditText android:text="100" android:selectAllOnFocus="true"
                    android:imeOptions="actionNext" android:numeric="integer"
                    android:width="100sp" android:id="@ id/dgWarn0" android:gravity="right"
                    android:layout_height="wrap_content" android:layout_weight="1"
                    android:layout_gravity="right" android:layout_span="2" />


                <EditText android:text="100" android:selectAllOnFocus="true"
                    android:imeOptions="actionNext" android:numeric="integer"
                    android:width="100sp" android:id="@ id/dgWarn1" android:gravity="right"
                    android:layout_height="wrap_content" android:layout_weight="1"
                    android:layout_gravity="right" android:layout_span="2" />

            </LinearLayout>

        </TableRow>

        <TableRow style="@style/FormRows">

            <TextView android:layout_width="70sp"
                android:layout_height="wrap_content" android:textSize="16sp"
                android:layout_weight="1" android:text="Data 2" />

            <Spinner android:id="@ id/dgData1" android:layout_weight="2"
                android:layout_width="wrap_content" android:layout_height="wrap_content" />

        </TableRow>


    </TableLayout>
</ScrollView>
  

Спасибо! за любую помощь!!!
Отметить

Комментарии:

1. Вы должны использовать Table Layout? Потому что мы можем перенести этот макет, используя относительный макет.

2. Я думал, что пробел после данных из-за android:layout_weight="1" , но вы сказали, что вас устраивает этот xml без вывода TableLayout

3. Я не уверен, почему, возможно, потому, что я только что обнаружил, что изучаю LinearLayout и RelativeLayout и повторно использую их снова и снова, но я никогда не использовал Table Layout… никогда не использовал это. Это было бы ОЧЕНЬ просто с относительной компоновкой. Расположите кнопку сохранения там, где вы хотите, сверху, выровняйте правые края блесен с правым краем кнопки сохранения, поместите метки данных справа от блесен и т.д. … Это должно быть несложно.

4. Вам следует ознакомиться с руководством Googles и посмотреть, как они использовали TableLayout: developer.android.com/guide/tutorials/views / …

5. Не могли бы вы, пожалуйста, поделиться макетом желаемого макета? @Venkatesh упомянул решение проблемы с помощью RelativeLayout . Я полностью согласен с этим, это гораздо удобнее для таких сложных представлений. TableLayout был создан для таблиц (…) в любом случае, с RelativeLayout вы также могли бы сохранить количество макетов, так что это был бы ваш лучший выбор.

Ответ №1:

Вот как может выглядеть RelativeLayout. Я сделал это довольно быстро… в нем отсутствуют некоторые другие поля и т.д… но это отправная точка.

 <?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" >
    <Button android:id="@ id/save"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content" 
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_margin="20dp"
        android:text="Save" />
    <Spinner android:id="@ id/spinner1"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignRight="@id/save" />
    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_toLeftOf="@id/spinner1"
        android:text="Data 1" />
    <EditText android:id="@ id/editbox"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignRight="@id/save"
        android:layout_below="@id/spinner1" />
    <Spinner android:id="@ id/spinner2"
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_alignRight="@id/save"
        android:layout_below="@id/editbox" />
    <TextView
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:layout_toLeftOf="@id/spinner2"
        android:text="Data 2" />
</RelativeLayout>
  

Комментарии:

1. Является ли TableLayout эффективным по сравнению с относительным макетом?

2. Я не знаю о какой-либо разнице в эффективности… но, учитывая лишь несколько задействованных представлений, я не могу представить, что это может иметь большое значение в любом случае.

Ответ №2:

Эй, я быстро просмотрел это, и, возможно, TableLayout теперь лучший выбор для этого конкретного действия. Рассматривали ли вы возможность использования RelativeLayout? Там вы можете определить места виджета, разместив их рядом с другими виджетами (например, какая-то кнопка находится под текстовым представлением).

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

Здесь вы можете прочитать о RealtiveLayout:

http://developer.android.com/reference/android/widget/RelativeLayout.html

http://developer.android.com/resources/tutorials/views/hello-relativelayout.html

редактировать: Максимус, великие умы мыслят одинаково, между нашими комментариями 30 секунд 🙂