深入理解LayoutInflater
總是見到LayoutInflater,那麼這個東西是幹什麼的呢?以前沒注意,直到今天突然遇到一個問題:
我要用到一個View,就比如說一個設計好的對話方塊,我要經常用,而且介面的佈局是固定的。那麼如果我在建立的時候用程式碼來實現佈局的話,可以是可以,但是是多麼的麻煩啊!於是我想到,能不能直接在xml佈局檔案中先佈局好,然後直接把這個xml通過某種方式直接放到這個iew上呢?
正在我不知所錯的時候,我看到了layoutinflater,然後看到這個東西是給view打氣的,也就是把一個xml例項化成一個view。哈哈終於找到解決上述問題的方法了。那麼我們下面具體來探討一下:
首先講一下layoutinflater的獲取方法:
有三種方式:
LayoutInflater.from(this)
getLayoutInflater()
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE)
以上三種方法都能獲得LayoutInflater
對於這個物件,我們只需要深入的探討一下他的一個方法就可以了,那就是inflate
我們主要研究是的其中的兩個
一個是inflate(int id,View parent)
這個方法是通過layout的id來膨脹那個父View。如果parent不是null的話,就返回父View,如果是null的話,就返回撐起的那個VIew
另一個是inflate(int id,View parent,boolean attach)
這個方法是和上面是差不多的,只不過這個時候還要看attach,如果是false,就返回子VIew,否則,返回這個View,你會發現子View被加到了父VIew上
private TextView tv;
private View view;
private View view2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout3);
/**
* 取得整個layout
*/
LinearLayout ll = (LinearLayout)findViewById(R.id.l3);
LayoutInflater inflater = LayoutInflater.from(this);
//LayoutInflater inflater2 = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
view = inflater.inflate(R.layout.layout4,ll,false);
view2 = inflater.inflate(R.layout.layout2,ll,false);
ll.addView(view);
ll.addView(view2);
Button btn = new Button(this);
btn.setText("gone");
ll.addView(btn);
btn.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// TODO Auto-generated method stub
MainActivity.this.view.setVisibility(View.GONE);
MainActivity.this.view.setBackgroundColor(Color.RED);
}
});
}
相關文章
- 深入理解LayoutInflater.inflate()
- Android中深入理解 LayoutInflater.inflate()Android
- 深入理解Isolate
- 深入理解HashMapHashMap
- 深入理解TransformORM
- 深入理解KVO
- 深入理解 JVMJVM
- 深入理解 GitGit
- 深入理解AQSAQS
- 深入理解JVMJVM
- 深入理解 TypeScriptTypeScript
- 深入理解JavaScriptCoreJavaScript
- 深入理解MVCMVC
- 深入理解 PWA
- 深入理解margin
- 深入理解ReactReact
- 深入理解BFC
- 深入理解reduxRedux
- BFC深入理解
- 深入理解 GCDGC
- 深入理解 requestAnimationFramerequestAnimationFrame
- 深入理解Eureka
- 深入理解copy
- AsyncTask深入理解
- 深入理解RunLoopOOP
- 深入理解Fsync
- 深入理解yield
- 深入理解MySQL索引MySql索引
- 深入理解ThreadLocalthread
- 深入理解JVM——物件JVM物件
- 對redis深入理解Redis
- 深入理解 ceph mgr
- 深入理解JavaScript原型JavaScript原型
- 深入理解 Event LoopOOP
- 深入理解Java PriorityQueueJava
- 深入理解vue元件Vue元件
- 深入理解 Java 方法Java
- 深入理解es module