创建一个16:9的视图

时间:2013-01-18 21:11:34

标签: android android-layout

我正在编写一个程序,我希望它始终具有16:9的屏幕。我为我写的主机2对象设置了一个基本的linearlayout。第一个覆盖了onMeasure方法,因此它将从屏幕上取出“方形”空间,第二个对象取其余部分。这在我拥有的16:9设备上看起来不错。但是当我在其他设备上试用它时,它看起来很糟糕。我试图从托管我的对象的linearlayout扩展,并覆盖布局的onMeasure方法。自定义Linearlayout好像16:9很好,但是我的第一个对象(正方形)仍然是大方块,而不是一个局限于16:9条带的小方块。以下是相关代码

MainActivity:     @覆盖     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);
    }

}

任何人都有更好的建议吗?

1 个答案:

答案 0 :(得分:0)

您编辑,view.xml文件。添加res / layout-xlarge / my_layout.xml文件夹。添加my_layout.xml文件后res / layout-xlarge /文件夹...我很抱歉英文不好