Получить размеры относительного описания

#android #android-layout #android-image

#Android #android-layout #android-изображение

Вопрос:

Как мне получить измерения определенного макета, такого как linearlayout или relativelayout, для которого layout_width и layout_height заданы значения wrap_content? используя этот метод

  layout.measure(MeasureSpec.makeMeasureSpec(0,
            MeasureSpec.UNSPECIFIED),
            MeasureSpec.makeMeasureSpec(0,
                    MeasureSpec.UNSPECIFIED));

 layout.layout(0, 0,
            layout.getMeasuredWidth(),
            layout.getMeasuredHeight());
  

возвращает значение null. Я пытаюсь создать растровое изображение из relativelayout, что-то вроде скриншота.

Ответ №1:

Не делайте этого с помощью метода onCreate(). Попробуйте это:

 @Override
public void onWindowFocusChanged(boolean hasFocus) {
    super.onWindowFocusChanged(hasFocus);
    if (hasFocus == true) {
        LinearLayout myLinearLayout = (LinearLayout) findViewById(R.id.myLinearLayout);
        int layoutWidth = myLinearLayout.getWidth();
        int layoutHeight = myLinearLayout.getHeight();
    }
}
  

Этот метод вызывается после onCreate(), когда размеры уже известны.

Комментарии:

1. Спасибо. У меня была похожая проблема, когда я пытался измерить в onCreate. Этот поток решил мою проблему.

Ответ №2:

Вы можете использовать getMeasuredWidth () и getMeasuredHeight () в своем представлении.

Помните, что сначала должен быть макет представления. Вы просто НЕ можете сделать это в onCreate, потому что размеры еще не известны. Вы должны подождать, пока это не будет макет.

Комментарии:

1. Что, если макет будет увеличен только из xml?

2. Я использую этот код для увеличения RelativeLayout layout = (RelativeLayout)getLayoutInflater().inflate(R.layout.pointer,null);

Ответ №3:

общедоступный класс AndroidResizeView расширяет активность {

 TextView textMyTextView;
Button myButton;

RelativeLayout rlayout;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.hightk);

    rlayout = (RelativeLayout) findViewById(R.id.rlayout);

    textMyTextView = (TextView) findViewById(R.id.textView1);

    myButton = (Button) findViewById(R.id.button1);

    myButton.setOnClickListener(new Button.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            updateSizeInfo();
        }
    });
}

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    // TODO Auto-generated method stub
    super.onWindowFocusChanged(hasFocus);
    updateSizeInfo();
}

private void updateSizeInfo() {

    textMyTextView.setText(String.valueOf("Width: "
              rlayout.getWidth()   "height ::"   rlayout.getHeight()));

}
  

}