常に16:9の画面にしたいプログラムを書いています。私が書いた2つのオブジェクトをホストするための基本的なlinearlayoutをセットアップしました。最初のオブジェクトは onMeasure メソッドを上書きして、画面から「正方形」のスペースを取得し、2 番目のオブジェクトが残りを取得します。これは、私が持っている 16:9 デバイスでは見栄えがします。しかし、他のデバイスで試してみると、見た目が悪いだけです。オブジェクトをホストする linearlayout から拡張して、レイアウトの 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();
}
カスタム linearlayout の 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);
}
}
誰かがより良い提案をしていますか?