2017-04-07 26 views
0

我正在创建一个基本窗体活动,其中用户从每行按钮中选择一个按钮并将其提交给后端数据库。安卓按钮在文本更改时调整为父级以外

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> 

回答

1

您可以使用两种方法来解决这个问题..

SOLUT离子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使文本不会去下一行和看法是准确的形状

+0

为了教育的目的,您能否解释如何将高度显式设置为零是什么使得父元素动态缩放的一部分? – Fawfulcopter

+0

这里的父'RadioGroup'有'android:layout_height =“0dp”'也有'android:layout_weight =“1”' - 重要的是android:layout_weight,它有助于动态地允许不同高度的孩子..你可以也从这里接受帮助:http://stackoverflow.com/questions/7220404/what-is-the-trick-with-0dip-layout-height-or-layouth-width – rafsanahmad007

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> 
+0

的第一种解决方案会导致按钮宽度减小到零从视野中消失。第二种解决方案没有明显的效果。 – Fawfulcopter

+0

使用第二种解决方案,但将ToggleButton的宽度保持为match_parent –