如何在Android的RowTable中对齐文本和按钮

Posted

技术标签:

【中文标题】如何在Android的RowTable中对齐文本和按钮【英文标题】:how to align text and button in RowTable in Android 【发布时间】:2016-03-23 20:59:27 【问题描述】:

我正在尝试设计我的片段,我想创建文本将正好位于按钮上方和中心。 现在我刚刚创建了一个 2 RowTables。但我仍然无法按照我的意愿对齐它。

这是 XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_
android:layout_
android:id="@+id/mainSearchRelativeLayout"
tools:context="com.example.matant.gpsportclient.Controllers.SearchEventFragmentController"
android:background="#ffffff">

<!-- TODO: Update blank fragment layout -->

<RelativeLayout
    android:layout_
    android:id="@+id/secondSearchLayout"
    android:layout_>

    <RadioGroup
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/radioGroupSearchFragment">

        <RadioButton
            android:layout_
            android:layout_
            android:text="Search by current location"
            android:id="@+id/radioButtonSearchCurrentLocation"
            android:checked="true" />

        <RadioButton
            android:layout_
            android:layout_
            android:text="Search by specific address"
            android:id="@+id/radioButtonSearchSpecificAdd"
            android:checked="false" />

        <EditText
            android:layout_
            android:layout_
            android:inputType="textPostalAddress"
            android:ems="10"
            android:id="@+id/editText"
            android:hint="Please insert real Street address" />


    </RadioGroup>
    <View
        android:id="@+id/divider1"
        android:layout_
        android:layout_
        android:background="@android:color/darker_gray"
        android:layout_below="@+id/radioGroupSearchFragment"
        />

    <ScrollView
        android:layout_
        android:id="@+id/searchScrollView"
        android:layout_below="@id/divider1"
        android:layout_>

        <RelativeLayout
            android:layout_
            android:id="@+id/mandatorySearchLayout"
            android:layout_below="@+id/divider1"
            android:layout_>

            <TextView
                android:layout_
                android:layout_
                android:text="Event Date Ranges"
                android:id="@+id/textViewEventDateRange"
                android:textColor="#000000"
                android:textStyle="bold"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/textViewSearchMandatory1" />

            <Button
                android:layout_
                android:layout_
                android:text="From"
                android:id="@+id/buttonSearchEventFrom"
                android:layout_below="@+id/textViewEventDateRange"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />

            <Button
                android:layout_
                android:layout_
                android:text="To"
                android:id="@+id/buttonSearchEventTo"
                android:layout_below="@+id/buttonSearchEventFrom"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />

            <TextView
                android:layout_
                android:layout_
                android:text="*All the fields are mandatory"
                android:id="@+id/textViewSearchMandatory1"
                android:textColor="#FF0000"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />
            <TableRow
                android:layout_
                android:id="@+id/row1"
                android:layout_below="@+id/buttonSearchEventTo"
                android:layout_>

                <TextView
                    android:layout_
                    android:layout_
                    android:text="Start in"
                    android:layout_marginLeft="50dp"
                    android:id="@+id/textView6" />

                <TextView
                    android:layout_
                    android:layout_
                    android:text="End in"
                    android:layout_marginLeft="150dp"
                    android:id="@+id/textView7" />
            </TableRow>

            <TableRow
                android:layout_
                android:id="@+id/row2"
                android:layout_below="@id/row1"
                android:layout_>

                <Button
                    android:layout_
                    android:layout_
                    android:text="New Button"
                    android:layout_marginLeft="20dp"
                    android:id="@+id/button2" />

                <Button
                    android:layout_
                    android:layout_
                    android:text="New Button"
                    android:layout_marginLeft="70dp"
                    android:id="@+id/button" />
            </TableRow>

        </RelativeLayout>


    </ScrollView>



    <View
        android:id="@+id/divider2"
        android:layout_
        android:layout_
        android:background="@android:color/darker_gray"
        android:layout_below="@+id/searchScrollView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="70dp" />

</RelativeLayout>

这就是我得到的:

【问题讨论】:

哪些按钮和文字?添加截图你要怎么做? 你的意思是说.. Start in 应该显示在 New Button 上? 如果你想像我说的那样或理解你的问题...然后放置文本和按钮框架布局。您的问题将得到解决 【参考方案1】:

由于您没有下划线,因此我建议您要对齐哪些按钮和 textView,您希望得到这样的结果:

为此,我建议删除 TableRows 并将其替换为,例如,LinearLayouts:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_
android:layout_
android:id="@+id/mainSearchRelativeLayout"
tools:context="com.example.matant.gpsportclient.Controllers.SearchEventFragmentController"
android:background="#ffffff">

<!-- TODO: Update blank fragment layout -->

<RelativeLayout
    android:layout_
    android:id="@+id/secondSearchLayout"
    android:layout_>

    <RadioGroup
        android:layout_
        android:layout_
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:id="@+id/radioGroupSearchFragment">

        <RadioButton
            android:layout_
            android:layout_
            android:text="Search by current location"
            android:id="@+id/radioButtonSearchCurrentLocation"
            android:checked="true" />

        <RadioButton
            android:layout_
            android:layout_
            android:text="Search by specific address"
            android:id="@+id/radioButtonSearchSpecificAdd"
            android:checked="false" />

        <EditText
            android:layout_
            android:layout_
            android:inputType="textPostalAddress"
            android:ems="10"
            android:id="@+id/editText"
            android:hint="Please insert real Street address" />


    </RadioGroup>
    <View
        android:id="@+id/divider1"
        android:layout_
        android:layout_
        android:background="@android:color/darker_gray"
        android:layout_below="@+id/radioGroupSearchFragment"
        />

    <ScrollView
        android:layout_
        android:id="@+id/searchScrollView"
        android:layout_below="@id/divider1"
        android:layout_>

        <RelativeLayout
            android:layout_
            android:id="@+id/mandatorySearchLayout"
            android:layout_below="@+id/divider1"
            android:layout_>

            <TextView
                android:layout_
                android:layout_
                android:text="Event Date Ranges"
                android:id="@+id/textViewEventDateRange"
                android:textColor="#000000"
                android:textStyle="bold"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_below="@+id/textViewSearchMandatory1" />

            <Button
                android:layout_
                android:layout_
                android:text="From"
                android:id="@+id/buttonSearchEventFrom"
                android:layout_below="@+id/textViewEventDateRange"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />

            <Button
                android:layout_
                android:layout_
                android:text="To"
                android:id="@+id/buttonSearchEventTo"
                android:layout_below="@+id/buttonSearchEventFrom"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:layout_alignParentRight="true"
                android:layout_alignParentEnd="true" />

            <TextView
                android:layout_
                android:layout_
                android:text="*All the fields are mandatory"
                android:id="@+id/textViewSearchMandatory1"
                android:textColor="#FF0000"
                android:layout_alignParentTop="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />

            <LinearLayout
                android:layout_below="@+id/buttonSearchEventTo"
                android:orientation="horizontal"
                android:layout_
                android:layout_>
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_weight="1"
                    android:layout_
                    android:layout_>
                    <TextView
                        android:layout_
                        android:layout_
                        android:text="Start in"
                        android:id="@+id/textView6" />
                    <Button
                        android:layout_
                        android:layout_
                        android:text="New Button"
                        android:id="@+id/button2" />
                </LinearLayout>
                <LinearLayout
                    android:orientation="vertical"
                    android:layout_weight="1"
                    android:layout_
                    android:layout_>
                    <TextView
                        android:layout_
                        android:layout_
                        android:text="End in"
                        android:id="@+id/textView7" />
                    <Button
                        android:layout_
                        android:layout_
                        android:text="New Button"
                        android:id="@+id/button" />
                </LinearLayout>
            </LinearLayout>

        </RelativeLayout>


    </ScrollView>



    <View
        android:id="@+id/divider2"
        android:layout_
        android:layout_
        android:background="@android:color/darker_gray"
        android:layout_below="@+id/searchScrollView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginTop="70dp" />

</RelativeLayout>

然后要考虑的最后一件事 - 删除默认按钮的阴影,使它们完全对齐 - 这个问题在这里讨论 - How to remove padding around buttons in android?

希望对你有帮助

【讨论】:

以上是关于如何在Android的RowTable中对齐文本和按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何在android的textview中对齐文本并正确对齐

无论在android中垂直对齐的字数如何,如何为多个文本视图设置相等的宽度?

在Android中的按钮内左对齐文本

Android垂直对齐文本和小部件

如何在 Android TextView 或 EditText 中右对齐文本?

如何在Android中左对齐TabLayout的标签文本