我有一个允许用户更改屏幕分辨率的android设备。例如,我有一个1080显示器,我将其分辨率设置为720.我可以验证电视设置中的分辨率是否发生了变化。但是,似乎Android不使用此信息。相反,它检索物理显示分辨率并使用它。所以它以1080为单位呈现所有内容,然后缩小到720.这是浪费资源。
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
即使电视告诉我屏幕分辨率是720,我仍然得到1080作为代码的输出。我的假设是对的吗?
我该如何更改?
我知道,每个Window都有一个Surface支持,原则上我可以改变它的大小:
getWindow().takeSurface(new SurfaceHolder.Callback2() {
@Override
public void surfaceRedrawNeeded(SurfaceHolder holder) {
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
holder.setFixedSize(200, 100);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
但是我得到了
java.lang.UnsupportedOperationException: Currently only support sizing from layout
除了使用任意大小创建自己的Surface之外,还有其他方法可以更改分辨率吗?它会起作用吗?)