0

常に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);
    }

}

誰かがより良い提案をしていますか?

4

1 に答える 1

0

view.xml ファイルを編集します。res/layout-xlarge/my_layout.xml フォルダーを追加します。my_layout.xml ファイル res/layout-xlarge/ フォルダーを追加した後... 英語が下手でごめんなさい

于 2013-01-19T01:41:18.227 に答える