我正在使用可重复使用的数字键盘构建应用程序。键盘已放置在自己的XML文件中,因此可以在整个应用程序中的所需位置包含它。我想将当前活动的屏幕分成两部分,底部是固定大小的数字键盘,上面是其他控件的RelativeLayout(RL)。
问题是,RL本身并不表现。在下面的示例中,RL占据整个屏幕,键盘不显示。真正奇怪的是当我颠倒放置时,将键盘放在顶部,屏幕显示为预期,键盘和RL各占约一半。
换句话说:当键盘位于顶部时,一切都很好(但键盘位于错误的位置);但是当我在底部包含键盘时,键盘没有显示,RL占据了整个屏幕。
帮助!这种不一致性使我疯狂,我即将把计算机扔到房间里。
活动的XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/statsTabLayout"
android:scaleType="fitXY"
android:background="#ffffff"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:baselineAligned="true"
android:orientation="vertical">
<RelativeLayout android:id="@+id/statsTopLayout"
android:background="#ffffff"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/textViewTopMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top"
android:layout_alignParentLeft="true"
android:paddingTop="0px"
></TextView>
<TextView android:id="@+id/textViewAverage"
android:text="Average = (%)"
android:textColor="#000000"
android:textSize = "25sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentLeft="true"
></TextView>
<Button android:id="@+id/buttonReset"
android:text="reset"
android:onClick="resetButtonClick"
android:textSize = "12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewAverage"
android:layout_alignBottom="@+id/textViewAverage"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentRight="true"
></Button>
<TextView android:id="@+id/textViewHi"
android:text="High= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewLow"
android:text="Low= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_centerHorizontal="true"
></TextView>
<TextView android:id="@+id/textViewMax"
android:text="Max= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewScore"
android:text="Score = "
android:textColor="#000000"
android:textSize = "30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_above="@+id/textViewScoreCalculation"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewScoreCalculation"
android:text="(score calculation)"
android:textColor="#000000"
android:textSize = "20sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10px"
android:layout_above="@+id/editTextPoints"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewPoints"
android:text="Enter Points: "
android:textSize = "30sp"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewBottomMargin"
android:layout_alignParentLeft="true"
android:paddingBottom="10px"
></TextView>
<EditText android:id="@+id/editTextPoints"
android:text=""
android:digits="-0123456789."
android:windowSoftInputMode="stateVisible"
android:focusable="true"
android:textSize = "30sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewPoints"
android:layout_alignBottom="@+id/textViewPoints"
android:layout_above="@+id/textViewBottomMargin"
android:layout_toRightOf="@+id/textViewPoints"
android:paddingBottom="10px"
></EditText>
<TextView android:id="@+id/textViewBottomMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:paddingBottom="0px"
></TextView>
</RelativeLayout>
<include layout="@layout/numerickeyboard" />
</LinearLayout>
附带键盘的父布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="104pt"
android:id="@+id/numberPadLayoutContainer"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:background="#404040"
android:layout_alignParentBottom="true"
>
有什么建议吗?
答案 0 :(得分:0)
可能是这样的情况,当您将键盘布局放在底部时,它将被渲染到屏幕外。通过将整个布局放入ScrollView,您可以轻松查看是否是这种情况。
我还建议您使用dp而不是pt值指定键盘的layout_height。否则,它可能在各种屏幕密度下看起来不正确。
答案 1 :(得分:0)
问题是RelativeLayout
的某些子布局属性(例如layout_alignParentBottom="true"
)要求布局在布置要与其底部对齐的子项之前确定其自身的尺寸。实际上,当孩子要求alignParentBottom时,它会强制RelativeLayout使用它可用的所有垂直空间。
布局堆栈中最后几个项目位于最终元素TextView android:id="@+id/textViewBottomMargin"
上方,定义为alignParentBottom
。我修改了布局,修改了最后几个元素,使其在前一个项目下方对齐,而不是在最后一个项目上方对齐。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/statsTabLayout"
android:scaleType="fitXY"
android:background="#ffffff"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:baselineAligned="true"
android:orientation="vertical">
<RelativeLayout android:id="@+id/statsTopLayout"
android:background="#ffffff"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextView android:id="@+id/textViewTopMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top"
android:layout_alignParentLeft="true"
android:paddingTop="0px"
></TextView>
<TextView android:id="@+id/textViewAverage"
android:text="Average = (%)"
android:textColor="#000000"
android:textSize = "25sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentLeft="true"
></TextView>
<Button android:id="@+id/buttonReset"
android:text="reset"
android:onClick="resetButtonClick"
android:textSize = "12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewAverage"
android:layout_alignBottom="@+id/textViewAverage"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentRight="true"
></Button>
<TextView android:id="@+id/textViewHi"
android:text="High= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewLow"
android:text="Low= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_centerHorizontal="true"
></TextView>
<TextView android:id="@+id/textViewMax"
android:text="Max= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewScore"
android:text="Score = "
android:textColor="#000000"
android:textSize = "30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewHi"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewScoreCalculation"
android:text="(score calculation)"
android:textColor="#000000"
android:textSize = "20sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10px"
android:layout_below="@+id/textViewScore"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewPoints"
android:text="Enter Points: "
android:textSize = "30sp"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/textViewScoreCalculation"
android:layout_alignParentLeft="true"
android:paddingBottom="10px"
></TextView>
<EditText android:id="@+id/editTextPoints"
android:text=""
android:digits="-0123456789."
android:windowSoftInputMode="stateVisible"
android:focusable="true"
android:textSize = "30sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewPoints"
android:layout_alignBottom="@+id/textViewPoints"
android:layout_toRightOf="@+id/textViewPoints"
android:paddingBottom="10px"
></EditText>
<TextView android:id="@+id/textViewBottomMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/editTextPoints"
android:paddingBottom="0px"
></TextView>
</RelativeLayout>
<include layout="@layout/numerickeyboard" />
</LinearLayout>
我还通过删除android:layout_alignParentBottom="true"
语句来修改键盘。
这是一个HVGA_1.6仿真器的屏幕截图(我将你的键盘区域设为绿色,用于截屏)。
根据修正后的问题,“当我们不包括键盘时,也希望statsTopLayout填满屏幕”(见评论),我谦虚地将这些修改提交给原始主键和键盘布局文件:
在原始main.xml
中,将根LinearLayout
更改为RelativeLayout
,然后将<include>
移至第一个元素。在该移动的<include>
元素中,添加来自android:id="@+id/numberPadLayoutContainer"
的{{1}}语句(并将其从numerickeyboard.xml
中删除(numerickeyboard.xml
将在没有本地ID声明的情况下编译)第三个元素现在是封闭的main.xml
,现在指定RelativeLayout
和layout_height="fill_parent"
。
layout_above="@id/numberPadLayoutContainer"
带有<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/statsTabLayout"
android:background="#ffffff"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
>
<include layout="@layout/numerickeyboard"
android:id="@+id/numberPadLayoutContainer"
/>
<RelativeLayout android:id="@+id/statsTopLayout"
android:background="#ffffff"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:layout_above="@id/numberPadLayoutContainer">
<TextView android:id="@+id/textViewTopMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_gravity="top"
android:layout_alignParentLeft="true"
android:paddingTop="0px"
></TextView>
<TextView android:id="@+id/textViewAverage"
android:text="Average = (%)"
android:textColor="#000000"
android:textSize = "25sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentLeft="true"
></TextView>
<Button android:id="@+id/buttonReset"
android:text="reset"
android:onClick="resetButtonClick"
android:textSize = "12sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewAverage"
android:layout_alignBottom="@+id/textViewAverage"
android:layout_below="@+id/textViewTopMargin"
android:layout_alignParentRight="true"
></Button>
<TextView android:id="@+id/textViewHi"
android:text="High= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewLow"
android:text="Low= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_centerHorizontal="true"
></TextView>
<TextView android:id="@+id/textViewMax"
android:text="Max= "
android:textColor="#000000"
android:textSize = "20sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_below="@+id/textViewAverage"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewScore"
android:text="Score = "
android:textColor="#000000"
android:textSize = "30sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="5px"
android:layout_above="@+id/textViewScoreCalculation"
android:layout_alignParentLeft="true"
></TextView>
<TextView android:id="@+id/textViewScoreCalculation"
android:text="(score calculation)"
android:textColor="#000000"
android:textSize = "20sp"
android:textStyle="italic"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10px"
android:layout_above="@+id/editTextPoints"
android:layout_alignParentRight="true"
></TextView>
<TextView android:id="@+id/textViewPoints"
android:text="Enter Points: "
android:textSize = "30sp"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_above="@+id/textViewBottomMargin"
android:layout_alignParentLeft="true"
android:paddingBottom="10px"
></TextView>
<EditText android:id="@+id/editTextPoints"
android:text=""
android:digits="-0123456789."
android:windowSoftInputMode="stateVisible"
android:focusable="true"
android:textSize = "30sp"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignTop="@+id/textViewPoints"
android:layout_alignBottom="@+id/textViewPoints"
android:layout_above="@+id/textViewBottomMargin"
android:layout_toRightOf="@+id/textViewPoints"
android:paddingBottom="10px"
></EditText>
<TextView android:id="@+id/textViewBottomMargin"
android:text=" "
android:textColor="#FFFFFF"
android:textSize = "5sp"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentBottom="true"
android:paddingBottom="0px"
></TextView>
</RelativeLayout>
</RelativeLayout>
声明的屏幕截图:
没有<include>
语句且没有<include>
语句的屏幕截图: