我正在编写一个程序,我想一直拥有一个 16:9 的屏幕。我设置了一个基本的线性布局来托管我编写的 2 个对象。第一个对象覆盖了 onMeasure 方法,因此它会从屏幕上占据一个“正方形”空间,而第二个对象占据其余部分。这在我拥有的 16:9 设备上看起来不错。但是当我在其他设备上尝试时,它看起来很糟糕。我试图从承载我的对象的线性布局扩展,并覆盖布局的 onMeasure 方法。自定义 Linearlayout 似乎可以做到 16:9,但我的第一个对象(正方形)仍然是大正方形,而不是限制在 16:9 条带上的小正方形。这是相关代码
MainActivity: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
layout = new MyLinear(this);
mField = new Field(this);
mField.setId(1);
control = new Controller(this);
control.setId(2);
layout.addView(mField);
layout.addView(control);
registerForContextMenu(control);
setContentView(layout);
mField.requestFocus();
}
自定义线性布局的 onMeasure 代码如下所示
public class MyLinear extends LinearLayout{
private int height, width; // dimension of the screen
private Context m_context;
public MyLinear(Context context) {
super(context);
m_context=context;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
int height_temp = View.MeasureSpec.getSize(heightMeasureSpec);
int width_temp = View.MeasureSpec.getSize(widthMeasureSpec);
double ratio = width_temp/(double)height_temp;
int final_height = (int) (width_temp/1.77);
height=final_height;
if (ratio<1.7) {
setMeasuredDimension(width_temp, (int) (width_temp/1.77));
} else {
setMeasuredDimension(width_temp, height_temp);
}
}
有人有更好的建议吗?