我有以下设置:
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainView" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:layout_margin="0dp"
android:gravity="bottom" android:orientation="vertical"
android:background="@color/yellow_background" android:padding="0dp">
<!-- There are some components here, but they aren't required to reproduce the bug -->
<SurfaceView
android:id="@+id/player" android:focusable="false"
android:layout_width="match_parent"
android:layout_height="800dp" />
</LinearLayout>
还有我的代码(一些位,如果您需要更多信息,请询问):
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// fullscreen
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
surfaceView = (SurfaceView) this.findViewById(R.id.player);
surfaceView.setDrawingCacheEnabled(false);
surfaceHolder = surfaceView.getHolder();
surfaceHolder.setKeepScreenOn(true);
surfaceHolder.addCallback(this);
}
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
canvasWidth = width;
canvasHeight = height;
}
// lots of code
结果 :
问题是:为什么surfaceChanged
调用高度为 798 而不是 800(与 SurfaceView 的值相同)?我在第二个 SurfaceView 内获得了 2dp 边框,这非常糟糕。尝试设置填充但没有成功。如何使surfaceview透明工作提供的解决方案,但它有点hackish并且减慢了我的应用程序。
(注意:我认为Surfaceview 中 Canvas 的尺寸与实际屏幕分辨率的对比并不适用于我的情况,无论如何我都在测试它)
注2:截图并没有完全反映上面的XML,它是一个500dp高度的测试,并且出现了相同的2dp边框。
环境:
- Android 模拟器(我无法访问平板电脑进行测试);
- SDK 工具 r18/r19;
- 在 MacOS 10.7 下;
- 设备处于肖像模式(WXGA 分辨率,Android 3.2)。