#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()));
}
}