我正在开发一个Android应用程序,我想在其中创建一个具有居中元素的windowBackground和一个也具有居中元素的布局。我希望这些元素位于完全相同的位置,并且布局与背景重叠。我遇到的问题是布局和背景似乎在计算中心时有所不同(请参见图片)。为什么会发生这种情况,我该怎么做才能将元素对齐?
这就是我现在看到的。红色框由背景创建,绿色框由前景创建。屏幕截图是使用Nexus 5X API 26仿真器创建的。
前景布局:
<?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">
<View
android:background="@color/foreground_box"
android:layout_width="10dp"
android:layout_height="10dp"
android:layout_centerInParent="true" />
</RelativeLayout>
背景可绘制对象(通过android:windowBackground
应用于我的主题)
<?xml version="1.0" encoding="UTF-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/background" />
<item android:gravity="center">
<shape
android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/background_box" />
<size android:width="10dp"
android:height="10dp" />
</shape>
</item>
</layer-list>
为清楚起见,我的颜色文件为
<?xml version="1.0" encoding="utf-8"?>
<resources>
...
<color name="background">#ffffff</color>
<color name="background_box">#AAFF0000</color>
<color name="foreground_box">#AA00FF00</color>
</resources>
此示例项目的完整源代码可在https://github.com/HofmaDresu/AndroidCenteredTest
中找到。答案 0 :(得分:1)
windowBackground
的原因包括高度 1)statusBar和2)actionBar
在background.xml中修改以下行
<item android:gravity="center" android:top="80dp"> // 56 actionBarSize + 24 statusBarHeight
由于statusBarHeight和actionBarSize随设备API /分辨率而异,因此您可能需要以编程方式进行管理。
这是结果。为了进行测试,请将调整后的背景尺寸设置得更大一些,以使视图和背景之间的重叠变得可见。
答案 1 :(得分:0)
这可能是由于ActionBar
在前台占用的额外空间。
要解决此问题,可以在前景布局中的View
上添加边距,如下所示:
android:layout_marginBottom="?android:attr/actionBarSize"
答案 2 :(得分:0)
在AS中对其进行测试之后,我可以说适合您background_drawable的代码是这样的:
<?xml version="1.0" encoding="UTF-8" ?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/background" />
<item android:gravity="center" android:bottom="48dp">
<shape
android:gravity="center"
android:shape="rectangle">
<solid android:color="@color/background_box" />
<size
android:width="10dp"
android:height="10dp" />
</shape>
</item>
使用 android:top ,红色方块比中心线下降得更多。需要使用 android:bottom 代替背景居中。根据我的测试结果,48dp是正确的值。