前言
有人說(shuō)你工作這么多年了,你平時(shí)熟讀四書(shū)五經(jīng),閱碼于無(wú)數(shù),你至今寫(xiě)過(guò)一篇技術(shù)博客嗎?聽(tīng)完這句話,我點(diǎn)燃手中的香煙,向空中呼出一口氣,當(dāng)香煙逐漸消失,我也在思考,確實(shí),這幾年來(lái),我沒(méi)有分享過(guò)一篇技術(shù)文章,以至于我覺(jué)得這幾年來(lái),我什么都沒(méi)有積累,這對(duì)于一個(gè)程序員想要往更高方向走,是至關(guān)重要的。于是,我決定嘗試著開(kāi)始寫(xiě)技術(shù)文章,剛開(kāi)始這些文章可能只是針對(duì)初學(xué)者,大??梢圆挥每矗瑤筒坏侥銈?,也獲取不到知識(shí),不逼逼了,開(kāi)始進(jìn)入正題。

1、開(kāi)始了我的第一個(gè)View
先上代碼,就不描述了
public class TalkPopWindow extends PopupWindow implements OnClickListener{
private View rootView,talk;
private Activity activity;
@SuppressLint("InflateParams")
public TalkPopWindow(Activity activity) {
LayoutInflater layoutInflater=(LayoutInflater) activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rootView=layoutInflater.inflate(R.layout.popuwindow_talk, null);
this.activity=activity;
this.setContentView(rootView);
this.setWidth(LayoutParams.FILL_PARENT);
this.setHeight(LayoutParams.WRAP_CONTENT);
this.setFocusable(true);
this.setOutsideTouchable(true);
this.update();
ColorDrawable dw=new ColorDrawable(00000000);
this.setBackgroundDrawable(dw);
this.setAnimationStyle(R.anim.fade_in);
//talk=(View)rootView.findViewById(R.id.talk);
LinearLayout post=(LinearLayout) rootView.findViewById(R.id.posttalk);
post.setOnClickListener(this);
}
public void showPopuWindow(View view){
if(!this.isShowing()){
this.showAsDropDown(view, 0, 0);
}else {
this.dismiss();
}
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.posttalk:
dismiss();
activity.startActivity(new Intent(activity, PostTalkActivity.class));
//PostTalkPopuWindow popuWindow=new PostTalkPopuWindow(activity);
//popuWindow.showPopuWindow(v);
break;
default:
break;
}
}
}
2、稍微解釋一下,首先是View是依賴于"窗口"來(lái)顯示的,也就是我們的Activity,最終是交給Window去處理,這里就不講它里面涉及的層級(jí)關(guān)系了。
所以我們的材料:需要一個(gè)Activity,一個(gè)布局文件,一個(gè)樣式,其余 的是一些內(nèi)部屬性。
可以看到內(nèi)部實(shí)現(xiàn)了一個(gè)監(jiān)聽(tīng)器,其實(shí)也可以從外面?zhèn)魅?,但這樣失去了封裝的意義,封裝的思想就是對(duì)內(nèi)私有,對(duì)外開(kāi)發(fā)。
所以你會(huì)看到,像show,dismiss等,可以自行封裝,我這里就簡(jiǎn)單封裝了一個(gè)顯示的方法,基本滿足需求。
3、下面看看我的布局文件,直接上碼


手機(jī)模擬器效果圖如下:

4、初始化并且調(diào)用
TalkPopWindow popWindow=new TalkPopWindow(SocialActivity.this);
popWindow.showAsDropDown(talk);
我是誰(shuí),我是漁人碼頭
一首寫(xiě)代碼特別帶勁的歌曲-my heart will go on
聽(tīng)歌曲了,下次再寫(xiě)點(diǎn)比這個(gè)更好一點(diǎn)的。這里只是我當(dāng)時(shí)入門(mén)時(shí)寫(xiě)下來(lái)的。