在文本更改时,Android按钮的大小调整为父级

时间:2017-04-07 16:04:31

标签: android android-layout

我正在创建一个基本表单活动,用户从每行按钮中选择一个按钮并将其提交到后端数据库。

screenshot A

每个按钮都是ToggleButton,带有自定义代码,使其行为类似于单选按钮(即每个RadioGroup只能选择一个)。每个水平行按钮属于不同的RadioGroup

这一切都很好,但是当把它加载到另一部具有不同宽高比的手机上时,会出现一些奇怪的布局行为:

screenshot 2

按钮中的文字不合适,所以它包裹起来。这主要是预期的,但同时,按钮随机下降一些任意数量的像素,下边缘被容器切掉,容器在按钮周围拒绝wrap_content。该按钮仍然正常工作,但底部的灯不显示,因此在发生此错误时无法知道它已被选中。

blueprint

我错过了什么?

layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView android:id="@+id/mainScrollView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
        android:id="@+id/mainLinearLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin">

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

            <TextView
                android:id="@+id/timerTextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="10dp"
                android:layout_marginStart="10dp"
                android:text="@string/activity_record_default_clock_display_time"
                android:paddingRight="10dp" />

            <TextView
                android:id="@+id/recordCountHeaderTextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/timerTextView"
                android:text="Records: " />

            <TextView
                android:id="@+id/recordCountTextView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_toRightOf="@+id/recordCountHeaderTextView"
                android:text="0" />

        </RelativeLayout>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/activity_record_vehicle_type"
            android:id="@+id/textView"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:layout_gravity="center_horizontal" />

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/VehicleGroup">

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_car"
                android:textOff="@string/activity_record_car"
                android:textOn="@string/activity_record_car"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_truck"
                android:textOff="@string/activity_record_truck"
                android:textOn="@string/activity_record_truck"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_suv"
                android:textOff="@string/activity_record_suv"
                android:textOn="@string/activity_record_suv"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_van"
                android:textOff="@string/activity_record_van"
                android:textOn="@string/activity_record_van"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_motorcycle"
                android:textOff="@string/activity_record_cycle"
                android:textOn="@string/activity_record_cycle"
                android:onClick="onToggle"
                android:layout_weight="1"
                android:checked="false" />
        </RadioGroup>

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/activity_record_driver"
            android:id="@+id/textView2"
            android:layout_marginTop="18dp"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:layout_gravity="center_horizontal" />

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/DriverGenderGroup">

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_m"
                android:textOff="@string/activity_record_male"
                android:textOn="@string/activity_record_male"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_f"
                android:textOff="@string/activity_record_female"
                android:textOn="@string/activity_record_female"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_u"
                android:textOff="@string/activity_record_unknown"
                android:textOn="@string/activity_record_unknown"
                android:onClick="onToggle"
                android:layout_weight="1" />
        </RadioGroup>

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/DriverProtectedGroup">

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_protected"
                android:textOff="@string/activity_record_protected"
                android:textOn="@string/activity_record_protected"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_notProtected"
                android:textOff="@string/activity_record_not"
                android:textOn="@string/activity_record_not"
                android:onClick="onToggle"
                android:layout_weight="1"
                android:checked="false" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_driver_unknownProtected"
                android:textOff="@string/activity_record_unknown"
                android:textOn="@string/activity_record_unknown"
                android:onClick="onToggle"
                android:layout_weight="1" />
        </RadioGroup>

        <CheckedTextView
            android:checkMark="?android:attr/listChoiceIndicatorMultiple"
            android:checked="false"
            android:layout_marginTop="18dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/activity_record_passenger"
            android:id="@+id/textView3"
            android:textAppearance="@android:style/TextAppearance.DeviceDefault.Large"
            android:layout_gravity="center_horizontal" />

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/PassengerGenderGroup">

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_m"
                android:textOff="@string/activity_record_male"
                android:textOn="@string/activity_record_male"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_f"
                android:textOff="@string/activity_record_female"
                android:textOn="@string/activity_record_female"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_u"
                android:textOff="@string/activity_record_unknown"
                android:textOn="@string/activity_record_unknown"
                android:onClick="onToggle"
                android:layout_weight="1" />
        </RadioGroup>

        <RadioGroup
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal"
            android:id="@+id/PassengerProtectedGroup">

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_protected"
                android:textOff="@string/activity_record_protected"
                android:textOn="@string/activity_record_protected"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_notProtected"
                android:textOff="@string/activity_record_not"
                android:textOn="@string/activity_record_not"
                android:onClick="onToggle"
                android:layout_weight="1" />

            <ToggleButton
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:id="@+id/btn_passenger_unknownProtected"
                android:textOff="@string/activity_record_unknown"
                android:textOn="@string/activity_record_unknown"
                android:onClick="onToggle"
                android:layout_weight="1" />
        </RadioGroup>

        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/btn_end_site"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                android:text="@string/activity_record_end_site"
                android:onClick="quit"/>

            <Button
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:minHeight="60dp"
                android:layout_toRightOf="@id/btn_end_site"
                android:layout_toEndOf="@id/btn_end_site"
                android:id="@+id/btn_send"
                android:text="@string/activity_record_record"
                android:onClick="send" />

        </RelativeLayout>
    </LinearLayout>
</ScrollView>

2 个答案:

答案 0 :(得分:1)

您可以使用两种方法来解决问题。

解决方案1 ​​

android:layout_height="match_parent"使用toggleButton,以便每个按钮都会根据大文本按钮增加大小。

您还必须设置:

 android:layout_height="0dp"
 android:layout_weight="1"

用于根布局以使其灵活。

 <RadioGroup
            android:id="@+id/VehicleGroup"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">

            <ToggleButton
                android:id="@+id/btn_car"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:minHeight="60dp"
                android:onClick="onToggle"
                android:textOff="Textddddddds"
                android:textOn="TExt" />

            <ToggleButton
                android:id="@+id/btn_truck"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:minHeight="60dp"
                android:onClick="onToggle"
                android:textOff="Text"
                android:textOn="TExt" />

            <ToggleButton
                android:id="@+id/btn_suv"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:minHeight="60dp"
                android:onClick="onToggle"
                android:textOff="Text"
                android:textOn="TExt" />

            <ToggleButton
                android:id="@+id/btn_van"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:minHeight="60dp"
                android:onClick="onToggle"
                android:textOff="Text"
                android:textOn="TExt" />

            <ToggleButton
                android:id="@+id/btn_motorcycle"
                android:layout_width="fill_parent"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:checked="false"
                android:minHeight="60dp"
                android:onClick="onToggle"
                android:textOff="Textdd"
                android:textOn="TExt" />
        </RadioGroup>

输出:

enter image description here

解决方案2

android:singleLine="true"使用toggleButton,以便文字不会转到下一行,视图也会是精确的形状

答案 1 :(得分:0)

试试这个:

<ToggleButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:minHeight="60dp"
            android:id="@+id/btn_suv"
            android:textOff="@string/activity_record_suv"
            android:textOn="@string/activity_record_suv"
            android:onClick="onToggle"
            android:layout_weight="1" />

<RadioGroup
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:id="@+id/VehicleGroup"
        android:weightSum = 5>