view.layout()失效问题

其实不是失效问题,只是当调用布局时,会重新调用view.layout(),所以前面设置的位置就不起作用了

情况1:

在设置View.layout()后,自己调用了view2.requestLayout();



情况2:

有些View的宽高改变,导致系统自动调用布局,例如textView的宽是wrap_content内容是“hello world” 在代码中调用textView.setText("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");




demo


布局文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="0dp"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"
        android:src="@drawable/ic_launcher"/>
</LinearLayout>


代码片段

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
       
       
       
       
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final TextView textView = (TextView) findViewById(R.id.text);
final ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.postDelayed(new Runnable() {
@Override
public void run() {
// imageView.getLayoutParams().height = 500;
imageView.layout(0, 200, imageView.getMeasuredWidth(), imageView.getHeight()+200);
// imageView.requestLayout();
textView.postDelayed(new Runnable() {
@Override
public void run() {
textView.setText("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
}
}, 2000);
}
}, 2000);
}


效果

2s后

view.layout()失效问题_第1张图片

4s后






你可能感兴趣的:(view.layout()失效问题)