【问题标题】:Button completely disappears when placed below gridview despite numerous configurations尽管有多种配置,但按钮在放置在 gridview 下方时会完全消失
【发布时间】:2014-08-07 00:39:55
【问题描述】:

我有一个视图,我希望将一个按钮放置在网格视图下方并填充剩余空间。该视图是一个相对布局,无论我赋予它什么属性,如果我将按钮与网格视图相关联,它就会消失。仅当我将其放置在与父底部对齐的相对视图中时,它才会出现,但它不会拉伸。我认为最有可能的解决方案是,虽然它也不起作用,但是将按钮放在相对视图中,alignParentBottom=True 然后 layout_below="id/gridview" (所有这些都是伪代码)。这是我现在的代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@drawable/pin_fragment_background"
    tools:context="com.lab125.viva_app.MainActivity$PlaceholderFragment" >

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
    />

   <TextView
        android:id="@+id/audioPIN_marquee"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="15dp"
        android:paddingBottom="30dip"
        android:gravity="center"
        android:textSize="15sp"
        android:textStyle="bold"
    />

    <LinearLayout
        android:id="@+id/keypad_wrapper"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:orientation="horizontal"
        android:layout_below="@id/audioPIN_marquee">
        <GridView
             android:id="@+id/keypad"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:columnWidth="90dp"
             android:gravity="center"
             android:horizontalSpacing="5dip"
             android:verticalSpacing="5dip"
             android:numColumns="3"
             android:stretchMode="columnWidth" />

       <Button 
            android:id="@+id/start_ver_btn"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textSize="15sp"
            android:textStyle="bold"
            android:text="@string/Start_Ver_Button"
            android:background="@drawable/button_style" />
    </LinearLayout>

    <Button
        android:id="@+id/audio_playback_btn"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/keypad_wrapper"
        android:text="play"
        android:textSize="15sp">
    </Button>


 </RelativeLayout>

同样,使用此代码,按钮根本不显示。


编辑:@Dave 的建议是正确的,将方向设置为垂直后我可以看到按钮。但是,我首先将 gridView 放置在线性布局中的唯一原因是试图在将其 android:layout_below 属性设置为 gridView 时不让按钮消失(通过将其 android:layout_below 设置为其他东西)。然而,我想要做的更准确的修复是没有将 gridView 的宽度和高度设置为 match_parent,这是按钮消失的根本原因。因此,我将 gridView 的高度设置为包裹内容,但这会导致网格缩小到每个网格元素的内容不再可见的程度。我发现其原因是 => 我以编程方式设置 gridview 的宽度和高度来包装其内容,然后将内部组件的宽度和高度设置为父视图的宽度和高度。意识到这是非常周期性的,这可能是为什么当我将它设置为包装内容时 gridview 正在缩小的原因。然后我根据屏幕的尺寸设置网格元素的宽度和高度,从而固定了gridView的大小。所以现在一切都差不多了。

这是我的新布局,如果有人感兴趣的话。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    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"
    android:background="@drawable/pin_fragment_background"
    tools:context="com.lab125.viva_app.MainActivity$PlaceholderFragment" > 

    <TextView
        android:id="@+id/section_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" 
    />

    <TextView
        android:id="@+id/audioPIN_marquee"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginBottom="20dp"
        android:paddingTop="15dp"
        android:gravity="center"
        android:textSize="15sp"
        android:textStyle="bold"
    />

    <GridView
        android:id="@+id/keypad"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/audioPIN_marquee"
        android:layout_marginTop="10dp"
        android:layout_marginBottom="20dp"
        android:columnWidth="90dp"
        android:gravity="center"
        android:horizontalSpacing="5dip"
        android:verticalSpacing="5dip"
        android:numColumns="3"
        android:stretchMode="columnWidth" />

     <Button 
        android:id="@+id/start_ver_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/keypad"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="20dp"
        android:textSize="15sp"
        android:textStyle="bold"
        android:text="@string/Start_Ver_Button"
        android:background="@drawable/button_style" />

    <!--
    <Button
        android:id="@+id/audio_playback_btn"
        android:layout_centerHorizontal="true"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/keypad_wrapper"
        android:text="play"
        android:textSize="15sp">
    </Button> -->


</RelativeLayout>

【问题讨论】:

  • 哪个按钮?你想向哪个方向伸展它? audio_playback_btn 可见吗?

标签: android gridview android-linearlayout android-button android-relativelayout


【解决方案1】:

start_ver_btn 不会显示,因为 gridview 的宽度和高度都有 match_parent,根据您的 layout_width 和高度判断,我认为您想将 LinearLayout 的方向设置为垂直。

【讨论】:

  • 请以 cmets 的身份发布澄清请求。
  • 更好? @bgenchel 如果您在 cmets 中回答我的问题,我可以提供更好的答案。
  • 标记为 start_ver_button 的按钮,我正在尝试垂直拉伸它。将其设置为垂直确实有效,但现在每个网格组件的尺寸都不正常。我以编程方式将它们设置为屏幕高度的一定百分比,但是一旦它们处于线性布局中,它们就不再遵循这一点。我该如何解决这两个目标?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 1970-01-01
  • 2016-06-09
相关资源
最近更新 更多