尽管有许多配置,但当置于gridview下方时,按钮完全消失

时间:2014-08-07 00:39:55

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

我有一个视图,其中我想要一个按钮放在网格视图下方并填满剩余的空间。视图是一个相对布局,无论我给它什么属性,如果我将按钮与网格视图相关联,它就会消失。只有当我将它放在相对视图中并且它与父母底部对齐时才会出现,但它不会拉伸。我认为最有可能的解决方案是将按钮放在相对视图中,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的高度来包装内容,但这导致网格缩小到每个网格元素的内容不再可见的程度。我发现原因是=&gt;我以编程方式设置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>

1 个答案:

答案 0 :(得分:0)

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