Java Android emulator Nexus 5x加载了错误的可绘制大小?

Java Android emulator Nexus 5x加载了错误的可绘制大小?,java,android,drawable,nexus-5x,Java,Android,Drawable,Nexus 5x,我没有Nexus 5x设备,但我使用的是Emulator 编辑:由Nexus 5x用户确认。这不是一个模拟器错误 问题: 在Nexus 5x上,应用程序加载的绘图尺寸不正确。而在Nexus5上则可以 我有一张原始尺寸为1440x2560的图片。将其大小调整为可绘制xxhdpi-1080x1920 日志还给我一些有趣的东西: Nexus 5: Display Width= 1080 Display Height= 1776 Background Width= 1080 Background He

我没有Nexus 5x设备,但我使用的是Emulator

编辑:由Nexus 5x用户确认。这不是一个模拟器错误

问题:

在Nexus 5x上,应用程序加载的绘图尺寸不正确。而在Nexus5上则可以

我有一张原始尺寸为1440x2560的图片。将其大小调整为可绘制xxhdpi-1080x1920

日志还给我一些有趣的东西:

Nexus 5:
Display Width= 1080 Display Height= 1776
Background Width= 1080 Background Height= 1920

Nexus 5x:
Display Width= 1080 Display Height= 1794
Background Width= 945 Background Height= 1680
我的密码

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp.backgroundisfdupyo">    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"

        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
...
<FrameLayout
    android:id="@+id/backgroundFrame"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent">

<ImageView
    android:id="@+id/backgroundImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="centerCrop"
    android:src="@drawable/background" />

</FrameLayout>
活动\u main.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.myapp.backgroundisfdupyo">    
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"

        android:theme="@android:style/Theme.NoTitleBar.Fullscreen">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />    
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
...
<FrameLayout
    android:id="@+id/backgroundFrame"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    app:layout_constraintTop_toTopOf="parent"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent">

<ImageView
    android:id="@+id/backgroundImage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scaleType="centerCrop"
    android:src="@drawable/background" />

</FrameLayout>
编辑:

它的量化密度为560 dpi,介于 xxhdpi和xxxhdpi一次密度桶。对于Nexus6来说 平台将缩小xxxhdpi资产的规模,但如果不是这样的话 可用,然后它将扩展xxhdpi资产

如何关闭它?我希望我的项目只从我的预制作图像中拍摄图像,我不希望它放大/缩小某些东西。

更新:问题的原因可能与
屏幕大小
密度
有关,而不仅仅是密度

尝试此解决方案:

创建一个新的可绘制文件夹,如下所示

drawable-large-xxxhdpi
您的设备有
大的
屏幕。这可以解决你的问题

检查问题,您可以看到您的设备
大小
密度


您需要更改模拟器的分辨率

首先,关闭仿真器并从
Android Studio
找到您的Nexus 5X设备并检查其分辨率。如果不正确,请单击编辑按钮,如下所示

其次,打开窗口,单击
Change
按钮

第三,单击
newhardware Profile

最后,根据需要更改分辨率,然后单击
Finish
按钮


加载绘图时,Android会缩放图像以匹配屏幕密度

屏幕密度并不总是与预定义的密度相匹配,如hdpi(1.5x)、xhdpi(2x)等。通常,您不提供所有预定义密度的图像:例如,在您的示例中,您没有提供tvdpi(1.33)。这就是为什么在这些情况下,系统将调整其中一个提供的图像的大小,以尽可能匹配屏幕密度

Nexus 5x和谷歌像素手机的密度系数为2.6。在这些手机上,系统将尝试缩小xxhdpi(3倍)图像,或者放大xhdpi(2倍)图像(如果不可用)

如果要完全禁用缩放,可以将图像放入drawable Nodepi文件夹中,它们在每个屏幕上始终显示相同数量的像素。但是,这可能不是您想要的,因为图像在高密度屏幕上显示太小,而在低密度屏幕上显示太大

困扰你的似乎是图像周围的空间。当屏幕总空间较大时,图像占据屏幕较小的部分是正常的。Nexus 5x比Nexus 5提供更多的屏幕空间。平板电脑提供了比手机更多的屏幕空间。而且可能的屏幕尺寸是无限的,所以你不能创建一个完全匹配每个屏幕尺寸的图像


然而,你可以在屏幕的中间将图像集中在某个背景之上,或者可以使用IVIEVIEW的Center Stand作物模式缩放图像,使其通过切割一些边缘填充整个屏幕。

尝试SypType <代码> FITCenter 或显示您的RES文件夹TRELoookes,像您的图像浏览高度而不是MatkHyb。尝试将其设置为匹配父项。我在FrameLayout中看到一个约束,这意味着在ConstraintLayout中使用FrameLayout,为什么?试着使用其中一种them@PavliukR我把它从FrameLayout中取出,它确实像Nexus 5x一样填满了屏幕,但是日志仍然说加载的bacground图像的宽度=945高度=1680,在这里它应该像Nexus 5宽度=1080高度=1920一样加载。我想它只是拉伸了图像。@user1779222没有任何变化。我发布了资源树及其大小。如您所见,没有一个图像是945 x 1680,Nexus 5x从何处提取?很明显,您的模拟器分辨率配置设置为xxhdpi,而不是xxxhdpi。您可以从日志中看到“显示宽度=1080”部分。AVD创建xxhdpi Nexus 5X作为默认值。检查我的答案。我从未在真实设备中遇到过nexus 5X错误。谢谢你的回答。设置正确。我的朋友有一个Nexus 5x,我给他发了这个应用。他发回了一张截图,问题仍然存在。这里的问题与资源有关。为什么加载的图像小于1080 x 1920。@paakjis更新了我的答案,可能是此更新解决了您的问题,或者使您更接近解决方案。没有任何更改。我尝试了你发布的链接,它在我的应用程序上显示“正常屏幕”。所以我猜它是正常的,不会在上面加载太大。@paakjis有趣的是,当我为5X创建一个模拟器并设置正常功能时,它似乎是long-large-xxxhdpi。是的,它在我的上也这么说。但我想不是这样的,是的。这就是问题所在。屏幕为1080x1920仍然感觉很不对劲,但它采用xhdpi(720x1280)图像并自动将其放大到945 x 1680,然后我需要使用中心裁剪将其放大更多,以适应屏幕。如果将图像放在可绘制的nodpi文件夹中并使用中心裁剪,它将以其原始大小加载并放大或缩小一次以适应屏幕。这仅适用于背景。但如果有图像按钮。它仍然只是缩小图像。然后我需要再次放大它。我认为应该有一种方法告诉它停止缩小,只需使用我准备的六个图像包中的一个(中间没有),中心裁剪只适用于ImageView或ImageButton中的src图像,而不是背景。不幸的是,您只能在精确缩放或完全不缩放之间进行选择。对于小图标,你应该考虑使用矢量绘制。