Android Studio中的预览与硬件中的预览不同

时间:2016-04-05 08:42:41

标签: android android-layout android-studio

我有一个ImageView作为背景,并希望在背景前放置一些小部件。

我已尝试过相对布局和线性布局,但仍然发现AndroidStudio中的布局预览与我在设备中部署的布局预览不同。设备和背景图像都是16:9,1920x1080

  • 背景分辨率:1080x1920
  • 设备分辨率:1080x1920
  • 活动主题:Theme.NoTitleBar.Fullscreen

这是布局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"
    tools:context="com.chihangc.imaginecup_prel.MainActivity"
    android:layout_margin="0dp"
    android:padding="0dp"

    >

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/r01_main"
    />
    <LinearLayout
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="500dp">

            <Button
                android:layout_width="210dp"
                android:layout_height="80dp"
                android:text="New Buttonr"
                android:id="@+id/button"
                android:layout_marginBottom="127dp"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true" />

            <Button
                android:layout_width="210dp"
                android:layout_height="80dp"
                android:text="New Buttonr"
                android:id="@+id/button2"
                android:layout_alignTop="@+id/button"
                android:layout_toRightOf="@+id/button"
                android:layout_toEndOf="@+id/button" />
        </LinearLayout>
    </LinearLayout>

</RelativeLayout>

硬件截图

Screenshot in Hardware Device

Android Studio布局预览

Screenshot of the preview in Android Studio

5 个答案:

答案 0 :(得分:2)

我看到的布局非常混乱。几个问题    - 当按线性布局包裹时,按钮中存在一些相对布局参数的混合。    - 有嵌套的线性布局层,这是不必要的。    - 以及各种硬编码值(例如按钮宽度。

我已根据代码做了一些改进。您可以使用此代码,并根据需要重新调整上边距(我现在将其设置为400dp),并希望这将在预览和实际设备之间提供一致。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="@drawable/r01_main"
        />
    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:weightSum="2"
        android:layout_marginTop="400dp">

        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="80dp"
            android:text="New Buttonr"
            android:id="@+id/button"/>

        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="80dp"
            android:text="New Buttonr"
            android:id="@+id/button2"/>
    </LinearLayout>

</RelativeLayout>

理想情况下,我们也不应该依赖marginTop。而是将图像分成多个图像。并将主体放置在底部上方的俯视图中。然后,这将更好地控制跨设备(具有不同高度)的视图布局。

答案 1 :(得分:0)

试试此代码

<?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:layout_margin="0dp"
    android:background="@drawable/bg"
    android:padding="0dp"
    tools:context="com.chihangc.imaginecup_prel.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:orientation="horizontal">

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_weight="0.5"
            android:text="New Buttonr" />

        <Button
            android:id="@+id/button2"
            android:layout_width="wrap_content"
            android:layout_height="80dp"
            android:layout_weight="0.5"
            android:text="New Buttonr" />
    </LinearLayout>
    
</RelativeLayout>

答案 2 :(得分:0)

由于您为marginBottom提供了显式值,因此您将获得不同屏幕尺寸的不同输出。您的模拟器屏幕大小可能与硬件屏幕大小不同。为防止这种情况,请使用RelativeLayout并相应地对齐按钮。

答案 3 :(得分:0)

也许两个屏幕的大小不同。

android:layout_marginTop="500dp"确保不同密度的边距大小相同,但不能确保不同分辨率的位置。

您可以删除marginTop的行并对齐LinearLayout的底部。

修改 垂直居中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:src="@drawable/r01_main" />

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal"
    android:layout_centerVertical="true">

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Button2" />
</LinearLayout>
</RelativeLayout>

答案 4 :(得分:0)

使用以下代码进行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"
    tools:context=".MainActivity"
    android:layout_margin="0dp"
    android:padding="0dp"
    android:background="@drawable/r01_main">



<LinearLayout

    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical">

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="New Buttonr"
                android:id="@+id/button"
                android:layout_weight=".5"/>

            <Button
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:text="New Buttonr"
                android:id="@+id/button2"
                android:layout_weight=".5"/>

</LinearLayout>
</RelativeLayout>
  

如果您想将按钮放在中央,您可以这样做。   替换android:layout_alignParentBottom =&#34; true&#34;至   android:layout_gravity =&#34;按钮的父布局中的center_vertical(线性布局)。