Android: как да центрирате изгледа в колоната на TableLayout?

Опитвам се да създам TabeLayout с мрежа от CheckBoxes. В горната част има 2 заглавки и всеки допълнителен ред се състои от етикет и 2 квадратчета за отметка. Бих искал таблицата да запълни цялото налично пространство, първата колона да е ориентирана вляво, а квадратчетата за отметка и техните заглавки да бъдат центрирани в колоните. В оформлението по-долу заглавките изглеждат правилно центрирани, но квадратчетата за отметка не са. Добавих фонов цвят към едно от квадратчетата за отметка, това показва, че квадратчето за отметка всъщност е нараснало, за да запълни колоната си (поради което няма да центрира, както желаете); въпреки параметъра за оформление "wrap_content".

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:orientation="vertical">
    <TableLayout 
        android:stretchColumns="1,2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">

        <TableRow>
            <TextView 
                android:text="" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <TextView 
                android:text="First category" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <TextView 
                android:text="2nd category" 
                android:gravity="center_horizontal"
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
        </TableRow>
        <TableRow>
            <TextView 
                android:text="Row 1: " 
                android:layout_width="wrap_content" 
                android:layout_height="wrap_content">
            </TextView>
            <CheckBox
                android:background="#FF001122"
                android:layout_height="50dip"
                android:layout_width="wrap_content" 
                android:gravity="center_horizontal">
            </CheckBox>
            <CheckBox
                android:layout_height="50dip"
                android:layout_width="wrap_content" 
                android:gravity="center_horizontal">
            </CheckBox>
        </TableRow>
    </TableLayout>
</LinearLayout>

въведете описание на изображението тук


person ab11    schedule 01.04.2011    source източник
comment
Искате квадратчето за отметка в центъра на категорията.. Нали?   -  person Venky    schedule 01.04.2011


Отговори (2)


В квадратчето за отметка, вместо настройка android:gravity="center_horizontal", искате да зададете android:layout_gravity="center_horizontal"

android:gravity контролира как изгледът разполага съдържанието си в собствения си контейнер и тъй като ширината ви е зададена на "wrap_content", няма празно пространство, в което квадратчето за отметка да се центрира вътре.

android:layout_weight казва на родителския изглед (в този случай TableRow) как да позиционира дъщерния елемент, така че да центрира квадратчето за отметка в клетката на таблицата.

person Brian Cooley    schedule 01.04.2011
comment
Това не помогна. Предполагам, защото проблемът е, че квадратчето за отметка се разтегна, за да запълни целия родител, така че няма къде да отиде, когато се опитам да го центрирам. - person ab11; 01.04.2011
comment
Съжалявам, сбърках. Това го поправи. Благодаря ти. - person ab11; 01.04.2011
comment
Програмно можем да го настроим така: TableRow.LayoutParams params = new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; - person Adil Malik; 07.02.2013
comment
@AdilMalik искам да задам гравитацията в центъра, а не само в center_horizontal, моля, помогнете ми. - person Hiren Patel; 16.02.2013

използване

android:layout_gravity="center"

ще централизира квадратчето за отметка, независимо дали ширината му е твърдо кодирана или "wrap_content"

person Sonia John Kavery    schedule 11.02.2015