我正在创建一个基本表单活动,用户从每行按钮中选择一个按钮并将其提交到后端数据库。
每个按钮都是ToggleButton
,带有自定义代码,使其行为类似于单选按钮(即每个RadioGroup
只能选择一个)。每个水平行按钮属于不同的RadioGroup
。
这一切都很好,但是当把它加载到另一部具有不同宽高比的手机上时,会出现一些奇怪的布局行为:
按钮中的文字不合适,所以它包裹起来。这主要是预期的,但同时,按钮随机下降一些任意数量的像素,下边缘被容器切掉,容器在按钮周围拒绝wrap_content
。该按钮仍然正常工作,但底部的灯不显示,因此在发生此错误时无法知道它已被选中。
我错过了什么?
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>
答案 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>
输出:
解决方案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>