一些组件离开了屏幕

时间:2017-02-07 17:44:42

标签: android

我开发了一款运行良好的Android应用程序,但问题是当我在小屏幕手机上运行我的应用程序时,一些组件会从屏幕上移除。那么请告诉我应该如何处理我的应用程序,以便它适合每个屏幕?

我应该创建所有这些文件夹(如下所示)并在每个文件夹中复制粘贴我应用程序的所有布局文件吗?或者我需要为每个文件夹设计不同的布局文件?

我是android的新手,请举一个简单的例子来帮忙。

文件夹:

res/layout/my_layout.xml
res/layout-small/my_layout.xml
res/layout-large/my_layout.xml
res/layout-xlarge/my_layout.xml
res/layout-xlarge-land/my_layout.xml
res/drawable-mdpi/my_icon.png
res/drawable-hdpi/my_icon.png
res/drawable-xhdpi/my_icon.png

我的代码的MainActivity的XML:

<?xml version="1.0" encoding="utf-8"?>
<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="com.example.appdeveloper.appname.MainActivity"
    android:background="#ff003b"
    android:focusableInTouchMode="true">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/appLogoImage_id"
        android:src="@drawable/applogo"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="1000dp" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/loginPassword_id"
        android:textAlignment="center"
        android:hint="Enter Application Password"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:layout_below="@+id/appLogoImage_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="50dp"
        android:background="@android:color/transparent"
        android:visibility="visible"
        android:textCursorDrawable="@drawable/white_cursor" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:text="REGISTRATION"
        android:id="@+id/regTitle_id"
        android:layout_below="@+id/appLogoImage_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:textColor="#ffffff"
        android:textAlignment="center"
        android:layout_marginTop="50dp"
        android:visibility="invisible"
        android:textStyle="bold" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textNoSuggestions|text"
        android:ems="10"
        android:id="@+id/regName_id"
        android:layout_below="@+id/loginPassword_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:hint="Your Good Name"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_marginTop="0dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/regPassword_id"
        android:layout_below="@+id/regName_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:hint="Application Password"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/regVerifyPass_id"
        android:layout_below="@+id/regPassword_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:hint="Verify Password"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/regRingCode_id"
        android:hint="Ringing Codeword"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_below="@+id/regVerifyPass_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        android:ems="10"
        android:id="@+id/regLocationCode_id"
        android:hint="Location Codeword"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/regRingCode_id"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/regNum1_id"
        android:hint="1st Trusted Number"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_below="@+id/regLocationCode_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible"
        android:phoneNumber="false" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/regNum2_id"
        android:hint="2nd Trusted Number"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_below="@+id/regNum1_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible"
        android:phoneNumber="false" />

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:inputType="phone"
        android:ems="10"
        android:id="@+id/regNum3_id"
        android:hint="3rd Trusted Number"
        android:textAlignment="center"
        android:textColor="#ffffff"
        android:textColorHint="#000000"
        android:background="@android:color/transparent"
        android:layout_below="@+id/regNum2_id"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="10dp"
        android:textCursorDrawable="@drawable/white_cursor"
        android:visibility="invisible"
        android:phoneNumber="false" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Register"
        android:id="@+id/regButton_id"
        android:layout_below="@+id/regNum3_id"
        android:layout_marginTop="15dp"
        android:layout_alignLeft="@+id/appLogoImage_id"
        android:layout_alignStart="@+id/appLogoImage_id"
        android:layout_alignRight="@+id/appLogoImage_id"
        android:layout_alignEnd="@+id/appLogoImage_id"
        android:visibility="invisible" />

</RelativeLayout>

1 个答案:

答案 0 :(得分:0)

除非您在dimen.xml文件中对您的尺寸(边距,填充,文本大小)进行软编码,否则您的应用将在具有不同ppi(每英寸像素数)的手机中具有不同的布局。

因此,在Dimens.xml中添加所有边距,特别是具有1000dp的边距。

原因:Android通过遍历dimens.xml文件自行处理所有情况(hdpi,mdpi,xhdpi,....),在您的情况下,您正专注于XMl布局编辑器中的预览屏幕固定的ppi并忽略具有不同ppi的其他屏幕的情况。

您的布局文件

<?xml version="1.0" encoding="utf-8"?>
<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="com.example.appdeveloper.appname.MainActivity"
android:background="#ff003b"
android:focusableInTouchMode="true">

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/appLogoImage_id"
    android:src="@drawable/applogo"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/margin_0" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="@dimen/margin_50"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/loginPassword_id"
    android:textAlignment="center"
    android:hint="Enter Application Password"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:layout_below="@+id/appLogoImage_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_50"
    android:background="@android:color/transparent"
    android:visibility="visible"
    android:textCursorDrawable="@drawable/white_cursor" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceMedium"
    android:text="REGISTRATION"
    android:id="@+id/regTitle_id"
    android:layout_below="@+id/appLogoImage_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:textColor="#ffffff"
    android:textAlignment="center"
    android:layout_marginTop="@dimen/margin_50"
    android:visibility="invisible"
    android:textStyle="bold" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textNoSuggestions|text"
    android:ems="10"
    android:id="@+id/regName_id"
    android:layout_below="@+id/loginPassword_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:hint="Your Good Name"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_marginTop="@dimen/margin_0"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/regPassword_id"
    android:layout_below="@+id/regName_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:hint="Application Password"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/regVerifyPass_id"
    android:layout_below="@+id/regPassword_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:hint="Verify Password"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/regRingCode_id"
    android:hint="Ringing Codeword"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_below="@+id/regVerifyPass_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="textPassword"
    android:ems="10"
    android:id="@+id/regLocationCode_id"
    android:hint="Location Codeword"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_below="@+id/regRingCode_id"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:ems="10"
    android:id="@+id/regNum1_id"
    android:hint="1st Trusted Number"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_below="@+id/regLocationCode_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible"
    android:phoneNumber="false" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:ems="10"
    android:id="@+id/regNum2_id"
    android:hint="2nd Trusted Number"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_below="@+id/regNum1_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible"
    android:phoneNumber="false" />

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:inputType="phone"
    android:ems="10"
    android:id="@+id/regNum3_id"
    android:hint="3rd Trusted Number"
    android:textAlignment="center"
    android:textColor="#ffffff"
    android:textColorHint="#000000"
    android:background="@android:color/transparent"
    android:layout_below="@+id/regNum2_id"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_marginTop="@dimen/margin_10"
    android:textCursorDrawable="@drawable/white_cursor"
    android:visibility="invisible"
    android:phoneNumber="false" />

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Register"
    android:id="@+id/regButton_id"
    android:layout_below="@+id/regNum3_id"
    android:layout_marginTop="@dimen/margin_15"
    android:layout_alignLeft="@+id/appLogoImage_id"
    android:layout_alignStart="@+id/appLogoImage_id"
    android:layout_alignRight="@+id/appLogoImage_id"
    android:layout_alignEnd="@+id/appLogoImage_id"
    android:visibility="invisible" />

</RelativeLayout>

res / values中的dimens.xml

<resources>
<dimen name="margin_10">10dp</dimen>
<dimen name="margin_0">0dp</dimen>
<dimen name="margin_15">15dp</dimen>
<dimen name="margin_30">30dp</dimen>
<dimen name="margin_50">50dp</dimen>
<dimen name="margin_20">20dp</dimen>

</resources>