我有一个ImageView作为背景,并希望在背景前放置一些小部件。
我已尝试过相对布局和线性布局,但仍然发现AndroidStudio中的布局预览与我在设备中部署的布局预览不同。设备和背景图像都是16:9,1920x1080
这是布局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>
硬件截图
Android Studio布局预览
答案 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(线性布局)。