Как получить программную ширину и высоту Относительно – Линейный макет в андроиде?

Мне нужны измерения времени выполнения Relative / Linear Layout.

Activity_home.xml :

<RelativeLayout android:id="@+id/rlParent" android:layout_width="match_parent" android:layout_height="match_parent" > </RelativeLayout> 

HomeActivity.java:

 private int width, height; RelativeLayout rlParent = (RelativeLayout) findViewById(R.id.rlParent); w = rlParent.getWidth(); h = rlParent.getHeight(); Log.i("Width-Height", width+"-"+height); 

Пожалуйста, поделитесь своими мыслями.

Solutions Collecting From Web of "Как получить программную ширину и высоту Относительно – Линейный макет в андроиде?"

Попробуй это

 @Override public void onWindowFocusChanged(boolean hasFocus) { // TODO Auto-generated method stub super.onWindowFocusChanged(hasFocus); updateSizeInfo(); } private void updateSizeInfo() { RelativeLayout rl_cards_details_card_area = (RelativeLayout) findViewById(R.id.rl_cards_details_card_area); w = rl_cards_details_card_area.getWidth(); h = rl_cards_details_card_area.getHeight(); Log.v("WH", w+"-"+h); } 

Вы можете присоединить OnGlobalLayoutListener к ViewTreeObserver относительного макета, который вызывается, когда к окну прикрепляется представление, и ему присваивается фактическая высота.

 final RelativeLayout rl_cards_details_card_area = (RelativeLayout) findViewById(R.id.rl_cards_details_card_area); rl_cards_details_card_area.getViewTreeObserver() .addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub int w = rl_cards_details_card_area.getWidth(); int h = rl_cards_details_card_area.getHeight(); Log.v("WH", w + "-" + h); rl_cards_details_card_area.getViewTreeObserver() .removeOnGlobalLayoutListener(this); } }); 

Ну, я реализовал таким образом:

 LinearLayout linearLayout = (LinearLayout)findViewById(R.id.layout); ViewTreeObserver viewTreeObserver = linearLayout.getViewTreeObserver(); viewTreeObserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { linearLayout.getViewTreeObserver().removeGlobalOnLayoutListener(this); int width = linearLayout.getMeasuredWidth(); int height = linearLayout.getMeasuredHeight(); } }); 

Этот пример предназначен для линейного макета, поскольку относительная компоновка соответствует тому же самому процессу.

Надеюсь, это поможет вам.

Попробуйте вот так:

 import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.RelativeLayout; import android.widget.TextView; public class AndroidResizeView extends Activity { 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())); } } 

Мы можем не получить правильную высоту и длину представления или компоновки, как только активность будет создана только после того, как макет не будет завышен полностью

так

1. либо вы можете запустить запущенный метод после некоторых секунд, которые, в свою очередь, вызовут функцию, которая получает свойства ширины и высоты.

2.we может использовать viewse obsever

  l = (RelativeLayout)findviewbyid(R.id.rl_cards_details_card_area); ViewTreeObserver observer = l.getViewTreeObserver(); observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() { @Override public void onGlobalLayout() { // TODO Auto-generated method stub ActivityClassName.this.getProperties(); l.getViewTreeObserver().removeGlobalOnLayoutListener( this); } }); void getProperties() { int a= l.getHeight(); int b = l.getWidth(); Toast.makeText(getActivity,""+a+" "+b,1000).show(); }