我观察到在/res/values/styles.xml中将<item name="android:textSize">14sp</item>
设置为20sp将导致输入元素在小于5“的设备上正常显示。似乎减小文本大小并没有减小大小输入框。这应该是正常的吗?
你好,
我在Android项目中遇到输入元素大小的问题。输入元素在&lt;尺寸为5英寸,但在我的大型设备上显得正常。
以下屏幕截图说明了这一点。知道可能是什么原因?
你好,
我目前在Android项目中跨不同模拟器的表单元素大小面临一个奇怪的问题。 由于这是我第一次创建移动应用程序,如果这是一个“功能”而不是错误,请随时告诉我。
在 Nexus 7 布局预览中,表单元素按预期显示:
但是,在Galaxy Nexus布局预览中,表单元素看起来比预期的要大,这是不可取的:
我尝试过很多方法,但一直无法解决这个问题。所有小于5英寸屏幕尺寸的设备都会出现此问题。
这是我的布局XML文件:
<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"
tools:context=".MainActivity" >
<TextView
android:id="@+id/register_link"
style="@style/FormFont.Label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="3dp"
android:clickable="true"
android:onClick="onClickRegisterLink"
android:text="@string/register_link_text" />
<RelativeLayout
android:id="@+id/layout_layout_form"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_above="@+id/register_link"
android:gravity="center" >
<ImageView
android:id="@+id/logo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/layout_form"
android:layout_alignRight="@+id/layout_form"
android:layout_marginBottom="50dp"
android:contentDescription="@string/logo_description"
android:src="@drawable/logo" />
<RelativeLayout
android:id="@+id/layout_form"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/logo"
android:gravity="center" >
<TextView
android:id="@+id/label_username"
style="@style/FormFont.Label"
android:layout_alignBottom="@+id/input_username"
android:layout_alignLeft="@+id/label_password"
android:layout_alignRight="@+id/label_password"
android:layout_alignTop="@+id/input_username"
android:layout_toLeftOf="@+id/input_username"
android:gravity="right"
android:text="@string/label_username" />
<TextView
android:id="@+id/label_password"
style="@style/FormFont.Label"
android:layout_alignBottom="@+id/input_password"
android:layout_alignTop="@+id/input_password"
android:layout_below="@+id/label_username"
android:layout_marginRight="50dp"
android:layout_toLeftOf="@+id/input_password"
android:gravity="right"
android:text="@string/label_passphrase" />
<EditText
android:id="@+id/input_username"
style="@style/FormFont.Input"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:inputType="text" />
<EditText
android:id="@+id/input_password"
style="@style/FormFont.Input"
android:layout_alignLeft="@+id/input_username"
android:layout_alignRight="@+id/input_username"
android:layout_below="@+id/input_username"
android:layout_marginTop="30dp"
android:inputType="textPassword" />
<Button
android:id="@+id/button_login"
style="@style/FormFont.Label"
android:layout_alignLeft="@+id/input_password"
android:layout_alignRight="@+id/input_password"
android:layout_below="@+id/input_password"
android:layout_marginTop="35dp"
android:gravity="center"
android:text="@string/button_login" />
</RelativeLayout>
</RelativeLayout>
</RelativeLayout>
我的/res/values/styles.xml:
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="FormFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textSize">14sp</item>
</style>
<style name="FormFont.Label">
</style>
<style name="FormFont.Input">
<item name="android:ems">12</item>
</style>
</resources>
我的/res/values-large/styles.xml:
<resources>
<!--
Base application theme, dependent on API level. This theme is replaced
by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
-->
<style name="AppBaseTheme" parent="android:Theme.Light">
<!--
Theme customizations available in newer API levels can go in
res/values-vXX/styles.xml, while customizations related to
backward-compatibility can go here.
-->
</style>
<!-- Application theme. -->
<style name="AppTheme" parent="AppBaseTheme">
<!-- All customizations that are NOT specific to a particular API-level can go here. -->
</style>
<style name="FormFont" parent="@android:style/TextAppearance.Medium">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textSize">20sp</item>
</style>
<style name="FormFont.Label">
</style>
<style name="FormFont.Input">
<item name="android:ems">12</item>
</style>
</resources>
如果您之前遇到此问题,请告诉我,并了解可能的原因:)非常感谢您!
答案 0 :(得分:1)
我通过在android:layout_height
,/res/values-xlarge/styles.xml
,/res/values-large/styles.xml
,/res/values/styles.xml
中为属性/res/values-small/styles.xml
指定不同的值来解决此问题。
这使我可以控制不同大小的Android设备中每个输入字段的确切高度。
答案 1 :(得分:0)
出现Galaxy Nexus的屏幕密度为xhdpi
您可能需要添加res/values-xhdpi/
并为Galaxy Nexus-screen-family中的设备添加值。您也可以使用sw<N>dp
(对于Galaxy Nexus res/values-sw320dp/
; 实际屏幕尺寸为360dp X 567dp
,即使values-sw320dp
包含Galaxy Nexus ,它还将包括最小宽度/高度为320dp ),w<N>dp
和/或h<N>dp
的任何其他设备。请参阅Providing Alternative Resources中的表格。
答案 2 :(得分:0)
但是,在Galaxy Nexus布局预览中,会出现表单元素 大于预期,这是不可取的
实际上,它并不大。 EditText
在两台设备上的物理尺寸完全相同。这就是密度无关像素(dp)的工作原理。他们将根据密度基线扩展所有内容,以便所有内容在多个设备上具有相同的大小。如果您有两个具有相同屏幕尺寸但密度不同的设备,这将特别有用。因此,两个设备上的UI元素的物理大小保持不变。如果您使用像素(px)则会有很大不同(具有较高密度的设备的物理尺寸将小于较低密度设备上的物理尺寸)。
显示更大,因为1. UI编辑器中的Galaxy Nexus和Nexus 7的UI缩放到(几乎)相同的外形尺寸2.为两者设置不同的文本大小。这实际上是这样的:
两台设备上的EditTexts
(屏幕截图实际上来自我的Nexus 4,其密度仅略高于GN,因此它不应该是一个大问题,而我的Nexus 7)具有相同的高度,但N4有一个较小的文本(这是因为你指定它是这样的。)