【问题标题】:Nexus-S/Galaxy SII 480x800 resolution shows 480x728 on genymotion emulator?Nexus-S/Galaxy SII 480x800 分辨率在 genymotion 模拟器上显示 480x728?
【发布时间】:2014-01-05 06:02:19
【问题描述】:

我没有 480x800 设备,所以我使用的是 genymotion 模拟器。 Nexus-S 的规格显示为 480x800,但当我在应用程序中获得屏幕尺寸时,它显示为 480x728?我想知道这是否是实际设备上也发生的事情,还是只是 genymotion 模拟器中的错误?

@Override
public void onClick( View view )
{
    if ( view == null )
        return;

    View v1 = getActivity().findViewById( R.id.bg );
    Toast.makeText( getActivity(), "height:" + v1.getHeight() + " width:" + v1.getWidth(), Toast.LENGTH_SHORT ).show();
}

我的 style.xml 中有这些

    <item name="android:windowFullscreen">true</item>
    <item name="android:windowNoTitle">true</item>

这是布局文件

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

【问题讨论】:

  • 你能把你得到屏幕尺寸的相关代码贴出来吗?

标签: android android-emulator genymotion


【解决方案1】:

实际高度与您的视图高度之差是屏幕底部软件按钮栏的高度(为 48 dp)。

确定实际屏幕高度的正确方法取决于设备 API 版本,并在此处描述:How to get real screen height and width?

使用以下 sn-p:

int screenWidth = 0;
int screenHeight = 0;
if (Build.VERSION.SDK_INT >= 11) {
    Point size = new Point();
    try {
        this.getWindowManager().getDefaultDisplay().getRealSize(size);
        screenWidth = size.x;
        screenHeight = size.y;
    } catch (NoSuchMethodError e) {
        Log.i("error", "it can't work");
    }

} else {
    DisplayMetrics metrics = new DisplayMetrics();
    this.getWindowManager().getDefaultDisplay().getMetrics(metrics);
    screenWidth = metrics.widthPixels;
    screenHeight = metrics.heightPixels;
}

【讨论】:

  • 那么,我该如何摆脱那些软件按钮呢?实际设备上也有吗?
  • 这不适用于 Nexus S,因为它有物理按钮。
  • Genymotion Nexus S 模拟器不是真正的设备副本,它只是经过一些调整的操作系统映像,是的,它显示了软件菜单按钮。软件按钮条的高度是 48dp 而不是 48px,对于 hdpi 密度,它是 48 * 1.5 = 72 px。
  • 没有办法在非root设备上隐藏这些软件按钮
【解决方案2】:

这是显示活动视图的尺寸。宽度是正确的,因为该视图跨越了显示器的整个宽度。但是,高度不是完整分辨率高度,因为它是完整高度减去状态栏的高度再减去操作栏的高度。如果您想要显示的真实分辨率,请使用 API 级别 13 及更高级别的以下代码:

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;

如果要支持低于 API 13,可以使用:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth();  // deprecated
int height = display.getHeight();  // deprecated

【讨论】:

  • 我正在禁用操作栏和标题。所以我想情况并非如此...有关代码详细信息,请参阅已编辑的问题。
  • 状态栏还显示吗?
  • 你能发布定义R.id.bg的XML
  • xml 用于添加的布局。
  • 好吧,这很奇怪。你能运行上面的代码,看看是否由于某种原因整体尺寸有误吗?如果它返回正确的 480x800 分辨率,我就难住了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多