ããå
è°ä¸ä¸åºæ¬çå®ç°åçï¼è¿ç§æ¡é¢æ¬æµ®çªçææå¾ç±»ä¼¼ä¸Widgetï¼ä½æ¯å®æ¯Widgetè¦çµæ´»çå¤ã主è¦æ¯éè¿WindowManagerè¿ä¸ªç±»æ¥å®ç°çï¼è°ç¨è¿ä¸ªç±»çaddViewæ¹æ³ç¨äºæ·»å ä¸ä¸ªæ¬æµ®çªï¼updateViewLayoutæ¹æ³ç¨äºæ´æ°æ¬æµ®çªçåæ°ï¼removeViewç¨äºç§»é¤æ¬æµ®çªãå
¶ä¸æ¬æµ®çªçåæ°æå¿
è¦è¯¦ç»è¯´æä¸ä¸ã
ããWindowManager.LayoutParamsè¿ä¸ªç±»ç¨äºæä¾æ¬æµ®çªæéçåæ°ï¼å
¶ä¸æå 个ç»å¸¸ä¼ç¨å°çåéï¼
ããtypeå¼ç¨äºç¡®å®æ¬æµ®çªçç±»åï¼ä¸è¬è®¾ä¸º2002ï¼è¡¨ç¤ºå¨ææåºç¨ç¨åºä¹ä¸ï¼ä½å¨ç¶ææ ä¹ä¸ã
ããflagså¼ç¨äºç¡®å®æ¬æµ®çªçè¡ä¸ºï¼æ¯å¦è¯´ä¸å¯èç¦ï¼é模æ对è¯æ¡ççï¼å±æ§é常å¤ï¼å¤§å®¶å¯ä»¥æ¥çææ¡£ã
ããgravityå¼ç¨äºç¡®å®æ¬æµ®çªç对é½æ¹å¼ï¼ä¸è¬è®¾ä¸ºå·¦ä¸è§å¯¹é½ï¼è¿æ ·å½æå¨æ¬æµ®çªçæ¶åæ¹ä¾¿è®¡ç®åæ ã
ããxå¼ç¨äºç¡®å®æ¬æµ®çªçä½ç½®ï¼å¦æè¦æ¨ªå移å¨æ¬æµ®çªï¼å°±éè¦æ¹åè¿ä¸ªå¼ã
ããyå¼ç¨äºç¡®å®æ¬æµ®çªçä½ç½®ï¼å¦æè¦çºµå移å¨æ¬æµ®çªï¼å°±éè¦æ¹åè¿ä¸ªå¼ã
ããwidthå¼ç¨äºæå®æ¬æµ®çªç宽度ã
ããheightå¼ç¨äºæå®æ¬æµ®çªçé«åº¦ã
ããå建æ¬æµ®çªè¿ç§çªä½éè¦åç¨æ·ç³è¯·æéæå¯ä»¥çï¼å æ¤è¿éè¦å¨AndroidManifest.xmlä¸å å
¥<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
ããåçä»ç»å®äºï¼ä¸é¢æ们å¼å§ç¨ä»£ç å®ç°ãé¦å
å¨Eclipseä¸æ°å»ºä¸ä¸ªAndroid项ç®ï¼é¡¹ç®åå°±å«å360FloatWindowDemoãç¶ååä¸ä¸å¸å±æ件ï¼å¸å±æ件é常ç®åï¼åªæä¸ä¸ªæé®ï¼æå¼ææ°å»ºactivity_main.xmlï¼å å
¥å¦ä¸ä»£ç ï¼
ãã[html] view plain copy
ãã<RelativeLayout xmlns:android="
http://schemas.android.com/apk/res/android"
ããxmlns:tools="
http://schemas.android.com/tools"
ããandroid:layout_width="fill_parent"
ããandroid:layout_height="fill_parent"
ããtools:context=".MainActivity" >
ãã<Button
ããandroid:id="@+id/start_float_window"
ããandroid:layout_width="fill_parent"
ããandroid:layout_height="wrap_content"
ããandroid:text="Start Float Window" >
ãã</Button>
ãã</RelativeLayout>
ããç¶ååæ°å»ºä¸ä¸ªå为float_window_small.xmlçå¸å±æ件ï¼ç¨äºå为å°æ¬æµ®çªçå¸å±ï¼å¨å
¶ä¸å å
¥å¦ä¸ä»£ç ï¼
ãã[html] view plain copy
ãã<?xml version="1.0" encoding="UTF-8"?>
ãã<LinearLayout
ããxmlns:android="
http://schemas.android.com/apk/res/android"
ããandroid:id="@+id/small_window_layout"
ããandroid:layout_width="60dip"
ããandroid:layout_height="25dip"
ããandroid:background="@drawable/bg_small"
ãã>
ãã<TextView
ããandroid:id="@+id/percent"
ããandroid:layout_width="fill_parent"
ããandroid:layout_height="fill_parent"
ããandroid:gravity="center"
ããandroid:textColor="#ffffff"
ãã/>
ãã</LinearLayout>
ããåæ°å»ºä¸ä¸ªå为float_window_big.xmlçå¸å±æ件ï¼ç¨äºå为大æ¬æµ®çªçå¸å±ï¼å¨å
¶ä¸å å
¥å¦ä¸ä»£ç ï¼
ãã[html] view plain copy
ãã<?xml version="1.0" encoding="UTF-8"?>
ãã<LinearLayout
ããxmlns:android="
http://schemas.android.com/apk/res/android"
ããandroid:id="@+id/big_window_layout"
ããandroid:layout_width="200dip"
ããandroid:layout_height="100dip"
ããandroid:background="@drawable/bg_big"
ããandroid:orientation="vertical"
ãã>
ãã<Button
ããandroid:id="@+id/close"
ããandroid:layout_width="100dip"
ããandroid:layout_height="40dip"
ããandroid:layout_gravity="center_horizontal"
ããandroid:layout_marginTop="12dip"
ããandroid:text="å
³éæ¬æµ®çª"
ãã/>
ãã<Button
ããandroid:id="@+id/back"
ããandroid:layout_width="100dip"
ããandroid:layout_height="40dip"
ããandroid:layout_gravity="center_horizontal"
ããandroid:text="è¿å"
ãã/>
ãã</LinearLayout>
ãã两个æ¬æµ®çªå¸å±æ件ä¸ç¨å°çå¾çèµæºï¼å¤§å®¶å¯ä»¥é便æ¾ç¹å¾çæ¥ä»£æ¿ï¼åæ¶æä¼ç»åºæºç ï¼å¤§å®¶ä¹å¯ä»¥ä»æºç ä¸ååºã
ããç¶åæå¼æå建MainActivityï¼è¿æ¯é¡¹ç®ç主çé¢ï¼å¨éé¢å å
¥å¦ä¸ä»£ç ï¼
ãã[java] view plain copy
ããpublic class MainActivity extends Activity {
ãã@Override
ããprotected void onCreate(Bundle savedInstanceState) {
ããsuper.onCreate(savedInstanceState);
ããsetContentView(R.layout.activity_main);
ããButton startFloatWindow = (Button) findViewById(R.id.start_float_window);
ããstartFloatWindow.setOnClickListener(new OnClickListener() {
ãã@Override
ããpublic void onClick(View arg0) {
ããIntent intent = new Intent(MainActivity.this, FloatWindowService.class);
ããstartService(intent);
ããfinish();
ãã}
ãã});
ãã}
ãã}
ããè¿éå¯ä»¥çå°ï¼MainActivityç代ç éçªç®åï¼å°±æ¯å¯¹å¼å¯æ¬æµ®çªçæé®æ³¨åäºä¸ä¸ªç¹å»äºä»¶ï¼ç¨äºæå¼ä¸ä¸ªæå¡ï¼ç¶åå
³éå½åActivityãå建æ¬æµ®çªçé»è¾é½äº¤ç»æå¡å»åäºã