android相对布局代码
A. android中获得控件的位置(相对于布局文件)
正确的代码如下所示
java">TextViewtv=(TextView)findViewById(R.id.text);
tv.getViewTreeObserver().addOnGlobalLayoutListener(newOnGlobalLayoutListener(){
@Override
publicvoidonGlobalLayout(){
//这里执行获取位置大小操作
intleft=tv.getLeft();
inttop=tv.getTop();
intbottom=tv.getBottom();
intright=tv.getRight();
//tv相对于父布局的坐标就得出来了
}
}
view的位置和大小是通过onLayout和onMeasure方法计算出来的,执行到activity的onCreate()方法时,尚未开始计算控件的大小和位置,所以是取不到的
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,这是一个注册监听视图树的观察者(observer),在视图树的全局事件改变时得到通知
除了OnGlobalLayoutListener ,ViewTreeObserver还有如下内部类:
interfaceViewTreeObserver.OnGlobalFocusChangeListener
当在一个视图树中的焦点状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnGlobalLayoutListener
当在一个视图树中全局布局发生改变或者视图树中的某个视图的可视状态发生改变时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnPreDrawListener
当一个视图树将要绘制时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnScrollChangedListener
当一个视图树中的一些组件发生滚动时,所要调用的回调函数的接口类
interfaceViewTreeObserver.OnTouchModeChangeListener
当一个视图树的触摸模式发生改变时,所要调用的回调函数的接口类
B. android相对布局不能填满整个屏幕,怎么办如图!另有布局代码如下,默认的整个布局为相对布局。
删掉 android:paddingxxx="..."
这四行让你的内容填满屏幕
C. 关于android相对布局RelativeLayout
如上图,你可以先拖一个3个button,这就满足了你的需求。然后你再去xml里详细看看他的布局是怎样的,再模仿这个布局自己在xml中直接写一个一样的布局。祝你好运
D. 关于Android里的线性布局和相对布局
新版本的默认就是相对布局了,你把<Relativelayout>,改成<Linearlayout>,便得,需要注意的是<Linearlayout>一般会指定android:orientation="vertical'属性就是你这个线性是垂直线性还是横向的线性,这里vertical是竖的,android:orientation="horizontal"就是横的。而<Relativelayout>里的子View都必须指定它的相对位置,你改成Linearlayout的话注意把那些相对属性去掉,具体你可网络下Linearlayout详解、Relativelayout详解。知道的更系统一点。
E. android开发,程序中如何修改控件的相对布局
RelativeLayout layout =(RelativeLayout) findViewById(R.id.layout);
Button but = new Button(this);
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(50,50);
lp.addRule(RelativeLayout.ALIGN_TOP,R.id.button);
lp.addRule(RelativeLayout.ALIGN_RIGHT,R.id.button);
layout.addView(but, lp);
关键是 addRule 方法 看代码很显然,是指定对齐button的顶端和右端。
另一种思路是,先在xml里配置好两个button。不过先把上面的button的visibility 设置为gone,用到的时候在java代码里设置为visible。
F. android如何在代码里设置布局
在线性布局LinearLayout里加入view比较简单,因为属性比较少,布局简单
示例,加入一个TextView
LinearLayoutlayout=(LinearLayout)findViewById(R.id.layout);
TextViewtv=newTextView(this);
tv.setText("hello,world");
LayoutParamslp=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
layout.addView(tv,lp);
在相对布局中RelativeLayout中加入view,属性较多
示例,加入TextView和Button,让TextView居中,并且设置Button在TextView的下方
RelativeLayoutlayout;
TextViewtv=newTextView(this);
tv.setText("hello,world");
Buttonbtn=newButton(this);
btn.setText("button");
tv.setId(0x011);
btn.setId(0x012);
LayoutParamstvLp=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
LayoutParamsbtnLp=newLayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
//添加布局规则,居中于父类
tvLp.addRule(RelativeLayout.CENTER_IN_PARENT,RelativeLayout.TRUE);
//添加布局规则,在tv的下方
btnLp.addRule(RelativeLayout.BELOW,tv.getId());
layout.addView(tv,tvLp);
layout.addView(btn,btnLp);
public void addRule(int verb, int anchor) 方法就是给view设定布局规则,verb是规则属性,就是xml文件中的各种属性值,anchor是依靠的view的id或者比如上面的RelativeLayout.CENTER_IN_PARENT的时候就是设置true或false