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