【问题标题】:Android layout: Why does radio button get cut off at bottom edge?Android布局:为什么单选按钮在底部边缘被切断?
【发布时间】:2016-11-03 01:08:58
【问题描述】:

对此非常陌生。设计视图在屏幕模拟器上看起来不错,但在我的物理手机上调试时会被切断。

我不知道还要添加什么。

这里是activity_main.xml

<TextView
    android:scrollbars = "vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/SpinnerPrompt"
    android:ellipsize="marquee"
    android:id="@+id/textViewMinutes"
    android:layout_alignTop="@+id/radMale"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/BtnCap"
    android:id="@+id/btnGenerate"
    android:layout_below="@+id/spinnerMinutes"
    android:layout_centerHorizontal="true" />

<Spinner
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/spinnerMinutes"
    android:spinnerMode="dropdown"
    android:layout_below="@+id/textViewMinutes"
    android:layout_alignLeft="@+id/textViewMinutes"
    android:layout_alignStart="@+id/textViewMinutes"
    android:layout_toStartOf="@+id/radioGroup"
    android:layout_toLeftOf="@+id/radioGroup" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_below="@+id/btnGenerate" />

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/btnGenerate"
    android:layout_toEndOf="@+id/btnGenerate"
    android:id="@+id/radioGroup"
    android:layout_above="@+id/btnGenerate">

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Male"
        android:id="@+id/radMale"
        android:checked="true"
        />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Female"
        android:id="@+id/radFemale"
        />
</RadioGroup>

这里是strings.xml

<resources>
<string name="app_name">Name</string>
<string name="BtnCap">Generate!</string>
<string name="SpinnerPrompt">Choose Number:</string>
<string name="Male">Male</string>
<string name="Female">Female</string>

【问题讨论】:

  • 请附上截图
  • 更新了主帖以包含屏幕截图。注意女性单选按钮是如何被砍掉的。

标签: android xml android-layout android-studio android-linearlayout


【解决方案1】:

这是由于不同的屏幕尺寸具有不同的分辨率。

请查看https://stackoverflow.com/a/35311502/2826147

您可以尝试使用 weightSum,它会解决您的问题,

检查一下

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <TextView
        android:id="@+id/textViewMinutes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:ellipsize="marquee"
        android:scrollbars="vertical"
        android:text="@string/SpinnerPrompt" />

    <Button
        android:id="@+id/btnGenerate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/spinnerMinutes"
        android:layout_centerHorizontal="true"
        android:text="@string/BtnCap" />

    <Spinner
        android:id="@+id/spinnerMinutes"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textViewMinutes"
        android:layout_alignStart="@+id/textViewMinutes"
        android:layout_below="@+id/textViewMinutes"
        android:layout_toLeftOf="@+id/radioGroup"
        android:layout_toStartOf="@+id/radioGroup"
        android:spinnerMode="dropdown" />

    <ListView
        android:id="@+id/listView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/btnGenerate" />

    <RadioGroup
        android:id="@+id/radioGroup"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@+id/btnGenerate"
        android:layout_toEndOf="@+id/btnGenerate"
        android:layout_toRightOf="@+id/btnGenerate"
        android:weightSum="2" >

        <RadioButton
            android:id="@+id/radMale"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:checked="true"
            android:text="Male" />

        <RadioButton
            android:id="@+id/radFemale"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:text="Female" />
    </RadioGroup >
</RelativeLayout >

【讨论】:

  • 那么,width = match_parent 强制它扩大整个宽度?
  • height="0dp" 和 layout_weight="1" 强制它的高度为零,而不是标题的高度?我想那会让它消失,不是吗?权重到底有什么作用?
【解决方案2】:

没有屏幕截图很难说,但您似乎正在将您的单选组对齐到按钮的末尾。因此,您的手机屏幕上可能没有足够的区域来显示所有单选按钮,这可能是它被剪掉的原因。

但同样,没有截图很难说

--看到截图后编辑--

让您的 XML 文件如下所示。问题是按钮顶部和父顶部之间的空间太小,无法放入两个单选按钮

<TextView
    android:scrollbars = "vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/SpinnerPrompt"
    android:ellipsize="marquee"
    android:id="@+id/textViewMinutes"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<RadioGroup
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentEnd="true"
    android:id="@+id/radioGroup"
    android:layout_alignParentTop="true" >

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Male"
        android:id="@+id/radMale"
        android:checked="true"
        />

    <RadioButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Female"
        android:id="@+id/radFemale"
        />
</RadioGroup>

<Spinner
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/spinnerMinutes"
    android:spinnerMode="dropdown"
    android:layout_below="@+id/textViewMinutes"
    android:layout_toStartOf="@id/radioGroup"
    android:layout_alignStart="@+id/textViewMinutes" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/BtnCap"
    android:id="@+id/btnGenerate"
    android:layout_below="@+id/radioGroup"
    android:layout_centerHorizontal="true" />

<ListView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/listView"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/btnGenerate" />

【讨论】:

  • 更新了主帖以包含屏幕截图。注意女性单选按钮是如何被砍掉的。
  • 感谢您的宝贵时间。当我将您的 XML 代码粘贴到原始代码上时,出现以下呈现错误:java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout
  • 发生这种情况是因为您将一些对象与尚未初始化的对象对齐。我已经编辑了我的回复以解决这个问题
【解决方案3】:

TL;DR

我们需要为每个单选按钮添加所需的padding

之前:

xml:

<androidx.appcompat.widget.AppCompatRadioButton
                android:id="@+id/color_white"
                style="@style/RadioDialog"
                android:button="@drawable/sel_ic_color_white"
                />

输出:

之后:

xml:

<androidx.appcompat.widget.AppCompatRadioButton
                android:id="@+id/color_white"
                style="@style/RadioDialog"
                android:button="@drawable/sel_ic_color_white"
                android:padding="@dimen/spacing_m"
                />

输出:

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多