逗人,
我有一个方形title.png,我在纵向模式下在屏幕的上端显示(也是正方形)TitleFragment(更不用说横向模式)了。现在我想在我的应用程序加载时添加一个启动画面。我跟着这个tutorial,它运行正常。我的splash.xml
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@color/dark"/>
<item>
<bitmap
android:gravity="top"
android:src="@drawable/title"/>
</item>
</layer-list>
正如您所看到的,我使用与TitleFragment中相同的title.png,然而,由于TitleFragment正在显示图像,因此无法将其定位在相同的位置。我的titlefragment.xml
看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@drawable/title"
tools:ignore="ContentDescription"/>
</FrameLayout>
mainactivity.xml
将其定位在屏幕顶部最大的sqaure中。
我的问题是:我可以在启动画面中模拟片段的位置。我希望启动画面中的title.png
和titleFragment中的title.png
是一致的。我已经使用了splash.xml
(android:gravity="top"
)中的相关行,但无济于事。
编辑:以下是一些截图。第一个是显示启动画面:
第二个显示主要活动(显然是虚拟文本):
答案 0 :(得分:1)
它们不匹配,因为普通位图与ImageView
的属性不同。 ImageView
的默认比例尺类型为FIT_CENTER
。不幸的是,位图没有任何缩放属性。
您应该可以做的是,不是在主题中设置窗口背景(如正确的方式 Splash Screens 建议),在SplashActivity
中设置窗口背景。这样,您可以调整背景drawable的边界以匹配屏幕的大小:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Display display = getWindowManager().getDefaultDisplay();
LayerDrawable drawable = (LayerDrawable) ContextCompat.getDrawable(this, R.drawable.splash);
drawable.setBounds(0, 0, display.getWidth(), display.getHeight());
getWindow().getDecorView().setBackground(drawable);
startMainActivity();
}
如果您还将包含标题的图层的重力设置为top|center_horizontal
,则此应允许您调整layer-list
中的标题可调整大小以匹配宽度屏幕:
<item android:gravity="top|center_horizontal">
<bitmap android:drawable="@drawable/title"/>
</item>
尽管如此,这仍然可能无法给你带来完美的效果,特别是在风景中。您可能仍希望弄乱可绘制的大小以及ImageView
的缩放类型以使其匹配。
此方法也可能会降低启动画面的启动时间,这绝对不可取。虽然,我使用的方法都不是资源密集型的,所以应该可以忽略不计,但我还没有测试过。