<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 93,  comments - 2,  trackbacks - 0
     
         摘要: 所謂自定義控件(或稱組件)也就是編寫自己的控件類型,而非Android中提供的標準的控件,如TextView,CheckBox等等.不過自定義的控件一般也都是從標準控件繼承來的,或者是多種控件組合,或者是對標準控件的屬性進行改變而得到的自己滿意的控件.     自定義控件可能會有很多種方法,這里只介紹我要介紹的方法.    &nb...  閱讀全文
    posted @ 2015-04-14 10:53 Terry Zou 閱讀(333) | 評論 (0)編輯 收藏

    在Android的聯機文檔中,有對Activity的簡單介紹,現在通過編寫代碼對Activity的啟動模式做一個深入的理解。 
    在配置文件AndroidManifest.xml中,activity元素的android:launchMode屬性用來配置對應Activity的啟動模式,目前有以下四種啟動模式: 
    1.standard 
    2.singleTop 
    3.singleTask 
    4.singleInstance 
    如果不對Activity設置啟動模式,默認就是standard模式

    一、standard

    請看以下代碼,實現了一個Activity :


    public class A_Activity extends Activity { 
        /** Called when the activity is first created. */ 
        @Override 
        public void onCreate(Bundle savedInstanceState) { 
            super.onCreate(savedInstanceState); 
            TextView textView=new TextView(this); 
            textView.setText(this+"");//這里用于打印當前Activity的hashcode,可以此判斷Activity實例是不是同一個對象 
            Button button=new Button(this); 
            button.setText("Go next activity"); 
            button.setOnClickListener(new OnClickListener(){

                public void onClick(View v) { 
                    // TODO Auto-generated method stub 
                    Intent intent=new Intent(); 
                    intent.setClass(A_Activity.this, A_Activity.class);//說明發出Intent與啟動的Activity都是A_Activity的實例 
                    startActivity(intent); 
                } 
            }); 
            LinearLayout layout=new LinearLayout(this); 
            layout.setOrientation(LinearLayout.VERTICAL); 
            layout.addView(textView); 
            layout.addView(button); 
            setContentView(layout); 
        } 
    } 
    運行之,請看下圖: 
     
    點擊button后,注意看第一行的textView 
     
    由此可知,生成了新的A_Activity對象,這時我們按回退鍵,就會依次回到之前的Activity。點擊button的過程就是壓棧的過程,在standard模式下,就會不斷生成新的Activity對象


    二、singleTop

    singleTop和standard模式都會將intent發送給新的Activity實例,不同的是,如果創建Intent的時候棧頂有要創建的singleTop模式下的Activity實例,則將Intent發送給該實例,不會再創建Activity的新實例。 
    還是使用之前的代碼,只是設置A_Activity的啟動模式為singleTop:android:launchMode="singleTop",運行之,請看下圖: 
     
    這個時候我們無論點擊多少次button,textView都顯示同一個Activity實例,按回退鍵時會直接退出程序,表明在singleTop模式下,如果在棧頂存在Intent中那個目標Activity的實例,就不會創建新的實例,而直接使用棧頂的對象,對于資源有限的移動設備來說,也是有實際意義的。 
    如果是在不同Activity之間跳轉,就會跟standard模式的情形一樣,請看下面代碼:
    public class A_Activity extends Activity {
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            TextView textView=new TextView(this);
            textView.setText(this+"");
            Button button=new Button(this);
            button.setText("Go B_Activity");
            button.setOnClickListener(new OnClickListener(){

                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent=new Intent();
                    intent.setClass(A_Activity.this, B_Activity.class);//從A跳轉到B 
                    startActivity(intent);
                }
            });
            LinearLayout layout=new LinearLayout(this);
            layout.setOrientation(LinearLayout.VERTICAL);
            layout.addView(textView);
            layout.addView(button);
            setContentView(layout);
        }
    }
    public class B_Activity extends Activity { 
        /**<li>Description: </li>
         *
         * @param savedInstanceState
         * @see android.app.Activity#onCreate(android.os.Bundle)
         */
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            TextView textView=new TextView(this);
            textView.setText(this+"");
            Button button=new Button(this);
            button.setText("Go A_Activity");
            button.setOnClickListener(new OnClickListener(){ 
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent=new Intent();
                    intent.setClass(B_Activity.this, A_Activity.class);//從B跳轉到A
                    startActivity(intent);
                }
            });
            LinearLayout layout=new LinearLayout(this);
            layout.setOrientation(LinearLayout.VERTICAL);
            layout.addView(textView);
            layout.addView(button);
            setContentView(layout);
        }
    }
    運行后,如下圖:
     
    點擊button后:
     
    再點擊button后:
     
    這樣每次都會創建目標Activity的新實例,因為在跳轉時,處于棧頂的對象不是目標Activity的實例

    三、singleTask

    singleTask模式只能創建一個實例,當發送一個Intent,目標Activity為singleTask模式時,系統會檢查棧里面是否已經有該Activity的實例,如果有就直接將Intent發送給它,還是使用(二)中的代碼,將A_Activity啟動模式設置為singleTask,B_Activity啟動模式設置為standard,啟動后如下圖:
     
    點擊button后:
     
    繼續點擊button:
     
    由此可知,singleTask模式的A_Activity在棧中只有一個實例,可以被重復使用
    并且,如果收到Intent生成一個新實例,那么用戶可以通過回退鍵回到上一個狀態,如果是已經存在的一個activity來處理這個Intent的話,就無法通過回退鍵回到上一個狀態(對singleInstance同樣適用) ,比如剛才最后一步如果再按回退鍵,就會直接退出程序,而不會回到上一步的狀態。

    四、singleInstance

    這個模式下的Activity在一個單獨的task棧中,這個棧也只能包含一個Activity的實例,將上面代碼稍微改動一下,顯示taskId:
    A_Activity 中:textView.setText(this.getTaskId()+"");
    B_Activity 中:textView.setText(this.getTaskId()+"");
    另外將B_Activity 設置為singleInstance模式,A_Activity 設置為standard模式,啟動后:
     
    點擊button后:
     
    表明啟動了新的task

    總結四個模式的不同:
    1、Intent的目標Activity由哪個task持有
    standard與singleTop的Activity所在task,與收到的Intent的發送者所在task相同,除非Intent包括參數FLAG_ACTIVITY_NEW_TASK,該參數會啟動Activity到新的task中;singleTask和singleInstance總是把Activity作為一個task的根元素,它們不會被啟動到其他task里
    2、是否允許Activity的多個實例
    standard與singleTop可以被實例化多次,可以存在不同task中,并且一個task可以包括同一activity的多個實例
    singleTask與singleInstance則在同一個task中只能允許Activity的一個實例,并且是task的根元素
    3、在同一個task棧中,是否允許其他Activity的實例存在
    singleInstance單獨在一個task中,其他啟動模式允許不同Activity的實例存在
    4、是否每次生成新實例接收Intent
    standard每次啟動都會生成新實例
    singleTop的activity如果在task的棧頂的話,則不生成新的activity實例,直接使用該實例,否則,就要生成新的實例
    singleInstance在所在棧中是唯一的activity,它每次都會被重用
    singleTask如果task棧中有該模式的Activity,就不生成新的activity實例,直接使用該實例,否則,就要生成新的實例
    轉載:http://blog.csdn.net/leiswpu/article/details/6248528

    posted @ 2015-04-13 17:56 Terry Zou 閱讀(325) | 評論 (0)編輯 收藏

    1. reference:參考某一資源ID。

        (1)屬性定義:

                <declare-styleable name = "名稱">

                       <attr name = "background" format = "reference" />

                </declare-styleable>

        (2)屬性使用:

                 <ImageView

                         android:layout_width = "42dip"
                         android:layout_height = "42dip"
                         android:background = "@drawable/圖片ID"

                         />

    2. color:顏色值。

        (1)屬性定義:

                <declare-styleable name = "名稱">

                       <attr name = "textColor" format = "color" />

                </declare-styleable>

        (2)屬性使用:

                <TextView

                         android:layout_width = "42dip"
                         android:layout_height = "42dip"
                         android:textColor = "#00FF00"

                         />

    3. boolean:布爾值。

        (1)屬性定義:

                <declare-styleable name = "名稱">

                       <attr name = "focusable" format = "boolean" />

                </declare-styleable>

        (2)屬性使用:

                <Button

                        android:layout_width = "42dip"
                        android:layout_height = "42dip"

                        android:focusable = "true"

                        />

    4. dimension:尺寸值。

        (1)屬性定義:

                <declare-styleable name = "名稱">

                       <attr name = "layout_width" format = "dimension" />

                </declare-styleable>

        (2)屬性使用:

                <Button

                        android:layout_width = "42dip"
                        android:layout_height = "42dip"

                        />

    5. float:浮點值。

        (1)屬性定義:

                <declare-styleable name = "AlphaAnimation">

                       <attr name = "fromAlpha" format = "float" />
                       <attr name = "toAlpha" format = "float" />

                </declare-styleable>

        (2)屬性使用:

                <alpha
                       android:fromAlpha = "1.0"
                       android:toAlpha = "0.7"

                       />

    6. integer:整型值。

        (1)屬性定義:

                <declare-styleable name = "AnimatedRotateDrawable">

                       <attr name = "visible" />
                       <attr name = "frameDuration" format="integer" />
                       <attr name = "framesCount" format="integer" />
                       <attr name = "pivotX" />
                       <attr name = "pivotY" />
                       <attr name = "drawable" />

                </declare-styleable>

        (2)屬性使用:

                <animated-rotate

                       xmlns:android = " 
                       android:drawable = "@drawable/圖片ID"  
                       android:pivotX = "50%"  
                       android:pivotY = "50%"  
                       android:framesCount = "12 
                       android:frameDuration = "100"

                       />

    7. string:字符串。

        (1)屬性定義:

                <declare-styleable name = "MapView">
                       <attr name = "apiKey" format = "string" />
                </declare-styleable>

        (2)屬性使用:

                <com.google.android.maps.MapView
                        android:layout_width = "fill_parent"
                        android:layout_height = "fill_parent"
                        android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"

                        />

    8. fraction:百分數。

        (1)屬性定義:

                <declare-styleable name="RotateDrawable">
                       <attr name = "visible" />
                       <attr name = "fromDegrees" format = "float" />
                       <attr name = "toDegrees" format = "float" />
                       <attr name = "pivotX" format = "fraction" />
                       <attr name = "pivotY" format = "fraction" />
                       <attr name = "drawable" />
                </declare-styleable>

        (2)屬性使用:

                <rotate

                       xmlns:android = " 
                   android:interpolator = "@anim/動畫ID"

                       android:fromDegrees = "0" 
                   android:toDegrees = "360"

                       android:pivotX = "200%"

                       android:pivotY = "300%" 
                   android:duration = "5000"

                       android:repeatMode = "restart"

                       android:repeatCount = "infinite"

                       />

    9. enum:枚舉值。

        (1)屬性定義:

                <declare-styleable name="名稱">
                       <attr name="orientation">
                              <enum name="horizontal" value="0" />
                              <enum name="vertical" value="1" />
                       </attr>            

                </declare-styleable>

        (2)屬性使用:

                <LinearLayout

                        xmlns:android = "                    android:orientation = "vertical"
                        android:layout_width = "fill_parent"
                        android:layout_height = "fill_parent"
                        >
                </LinearLayout>

    10. flag:位或運算。

         (1)屬性定義:

                 <declare-styleable name="名稱">
                        <attr name="windowSoftInputMode">
                                <flag name = "stateUnspecified" value = "0" />
                                <flag name = "stateUnchanged" value = "1" />
                                <flag name = "stateHidden" value = "2" />
                                <flag name = "stateAlwaysHidden" value = "3" />
                                <flag name = "stateVisible" value = "4" />
                                <flag name = "stateAlwaysVisible" value = "5" />
                                <flag name = "adjustUnspecified" value = "0x00" />
                                <flag name = "adjustResize" value = "0x10" />
                                <flag name = "adjustPan" value = "0x20" />
                                <flag name = "adjustNothing" value = "0x30" />
                         </attr>         

                 </declare-styleable>

         (2)屬性使用:

                <activity

                       android:name = ".StyleAndThemeActivity"
                       android:label = "@string/app_name"
                       android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
                       <intent-filter>
                              <action android:name = "android.intent.action.MAIN" />
                              <category android:name = "android.intent.category.LAUNCHER" />
                       </intent-filter>
                 </activity>

         注意:

         屬性定義時可以指定多種類型值。

        (1)屬性定義:

                <declare-styleable name = "名稱">

                       <attr name = "background" format = "reference|color" />

                </declare-styleable>

        (2)屬性使用:

                 <ImageView

                         android:layout_width = "42dip"
                         android:layout_height = "42dip"
                         android:background = "@drawable/圖片ID|#00FF00"

                         />

         摘要: showDialog()調用createDialog()和onPrepareDialog(),其中createDialog()調用onCreateDialog()。例子如下所示 Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->  ...  閱讀全文
    posted @ 2015-02-03 08:55 Terry Zou 閱讀(310) | 評論 (0)編輯 收藏

    private Vibrator vibrator;


        取得震動服務的句柄

         vibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);

         或者 vibrator = (Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);

        開始震動有兩個接口

          1 .   vibrator.vibrate(2000);//震動指定時間 ,數據類型long,單位為毫秒,一毫秒為1/1000秒

          2.    vibrator.vibrate(new long[]{100,10,100,1000}, -1);//按照指定的模式去震動。

        數組參數意義:第一個參數為等待指定時間后開始震動,震動時間為第二個參數。后邊的參數依次為等待震動和震動的時間

        第二個參數為重復次數,-1為不重復,0為一直震動    


        取消震動

           vibrator.cancel();//取消震動,立即停止震動

           震動為一直震動的話,如果不取消震動,就算退出,也會一直震動


        最重要的,增加權限,否則運行時出錯

        <uses-permission android:name="android.permission.VIBRATE"/>

    posted @ 2015-01-28 17:18 Terry Zou 閱讀(765) | 評論 (0)編輯 收藏
    J2SE 5.0提供了一組atomic class來幫助我們簡化同步處理。基本工作原理是使用了同步synchronized的方法實現了對一個long, integer, 對象的增、減、賦值(更新)操作. 比如對于++運算符AtomicInteger可以將它持有的integer 能夠atomic 地遞增。在需要訪問兩個或兩個以上 atomic變量的程序代碼(或者是對單一的atomic變量執行兩個或兩個以上的操作)通常都需要被synchronize以便兩者的操作能夠被當作是一個atomic的單元。

    java多線程用法-使用AtomicInteger
    下面通過簡單的兩個例子的對比來看一下 AtomicInteger 的強大的功能
    class Counter {
    private volatile int count = 0;

    public synchronized void increment() {
        count++;  //若要線程安全執行執行count++,需要加鎖
    }

    public int getCount() {
        return count;
    }
    }

    class Counter {
        private AtomicInteger count = new AtomicInteger(); 

    public void increment() {
        count.incrementAndGet();
    }
           //使用AtomicInteger之后,不需要加鎖,也可以實現線程安全。
    public int getCount() {
        return count.get();
    }
    }

    從上面的例子中我們可以看出:使用AtomicInteger是非常的安全的
    那么為什么不使用記數器自加呢,例如count++這樣的,因為這種計數是線程不安全的,高并發訪問時統計會有誤,而AtomicInteger為什么能夠達到多而不亂,處理高并發應付自如呢?
    這是由硬件提供原子操作指令實現的。在非激烈競爭的情況下,開銷更小,速度更快。Java.util.concurrent中實現的原子操作類包括:
    AtomicBoolean、AtomicInteger、AtomicLong、AtomicReference。
    posted @ 2015-01-28 16:50 Terry Zou 閱讀(178) | 評論 (0)編輯 收藏
    01-21 20:58:10.615: E/HwLauncher(3286): Launcher dialog dismiss failed : java.lang.IllegalArgumentException: no dialog with id 1 was ever shown via Activity#showDialog
    01-21 20:58:10.715: E/SubmitMessage(8010): Submit string: submit:trigger=0,bugtype=2,modulename=com.zhihe.xqsh,level=1,testtype=NORMAL,path=/data/log/unzip/H60-L01_V100R001CHNC00B307_DU2SSE1472000007_20150121205810_crash
    01-21 20:58:10.940: E/HwSystemManager(3431): HoldService:mAppInfo == null
    01-21 20:58:10.960: E/HwSystemManager(3431): HoldService:mAppInfo == null
    01-21 20:58:12.745: E/HwLauncher(3286): Launcher dialog dismiss failed : java.lang.IllegalArgumentException: no dialog with id 1 was ever shown via Activity#showDialog
    01-21 20:58:15.230: E/Thermal-daemon(2421): [ap] temp_new :35  temp_old :34
    01-21 20:58:20.230: E/Thermal-daemon(2421): [ap] temp_new :34  temp_old :35
    01-21 20:58:20.235: E/Thermal-daemon(2421): Report temperature: [ap] temp :34  report_threshold:1

    當用到FinalBitmap時,及對圖片進行異步緩存的情況下,第三方包可能用到了存儲卡
    posted @ 2015-01-22 11:21 Terry Zou 閱讀(2600) | 評論 (0)編輯 收藏

    標簽用于指定屏幕內的焦點View

    例如我們點擊tab鍵或enter鍵焦點自動進入下一個輸入框
    用法: 將標簽置于Views標簽內部

                <EditText id="@+id/text"
                             android:layout_width="fill_parent"
                             android:layout_height="wrap_content"
                             android:layout_weight="0"
                             android:paddingBottom="4">
                       <requestFocus />
                </EditText>

    posted @ 2015-01-20 15:32 Terry Zou 閱讀(185) | 評論 (0)編輯 收藏
    1. onFinishInflate() 當View中所有的子控件均被映射成xml后觸發 
    2. onMeasure( int ,  int ) 確定所有子元素的大小 
    3. onLayout( boolean ,  int ,  int ,  int ,  int ) 當View分配所有的子元素的大小和位置時觸發     
    4. onSizeChanged( int ,  int ,  int ,  int ) 當view的大小發生變化時觸發  
    5. onDraw(Canvas) view渲染內容的細節  
    6. onKeyDown( int , KeyEvent) 有按鍵按下后觸發  
    7. onKeyUp( int , KeyEvent) 有按鍵按下后彈起時觸發  
    8. onTrackballEvent(MotionEvent) 軌跡球事件  
    9. onTouchEvent(MotionEvent) 觸屏事件  
    10. onFocusChanged( boolean ,  int , Rect) 當View獲取或失去焦點時觸發   
    11. onWindowFocusChanged( boolean ) 當窗口包含的view獲取或失去焦點時觸發  
    12. onAttachedToWindow() 當view被附著到一個窗口時觸發  
    13. onDetachedFromWindow() 當view離開附著的窗口時觸發,Android123提示該方法和  onAttachedToWindow() 是相反的。  
    14. onWindowVisibilityChanged( int ) 當窗口中包含的可見的view發生變化時觸發 
    posted @ 2014-12-01 22:41 Terry Zou 閱讀(772) | 評論 (0)編輯 收藏

    標簽用于指定屏幕內的焦點View

    例如我們點擊tab鍵或enter鍵焦點自動進入下一個輸入框
    用法: 將標簽置于Views標簽內部

                <EditText id="@+id/text"
                             android:layout_width="fill_parent"
                             android:layout_height="wrap_content"
                             android:layout_weight="0"
                             android:paddingBottom="4">
                       <requestFocus />
                </EditText>


    android:ems = "10" 設置TextView或者Edittext的寬度為10個字符的寬度。當設置該屬性后,控件顯示的長度就為10個字符的長度,超出的部分將不顯示。


    轉載:
    http://blog.sina.com.cn/s/blog_90cdca4c01011kdc.html

    posted @ 2014-11-27 00:11 Terry Zou 閱讀(254) | 評論 (0)編輯 收藏
    僅列出標題
    共8頁: 上一頁 1 2 3 4 5 6 7 8 下一頁 
    <2025年7月>
    293012345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    常用鏈接

    留言簿(2)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    相冊

    收藏夾

    Java

    搜索

    •  

    最新隨筆

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费大片黄在线观看yw| 国产aⅴ无码专区亚洲av麻豆| 成人婷婷网色偷偷亚洲男人的天堂 | 国产va免费精品观看精品| 亚洲乱理伦片在线观看中字| 亚洲精品国产自在久久| 99久久精品免费精品国产| 亚洲精品色播一区二区| 国产AV无码专区亚洲Av| 女人被男人桶得好爽免费视频| 久久久久久久久久免免费精品| 亚洲熟妇色自偷自拍另类| 国产精品jizz在线观看免费| 久久免费线看线看| 韩国免费一级成人毛片| 日本免费精品一区二区三区| 亚洲黄色三级网站| 亚洲精品国产高清嫩草影院| 国产免费一区二区三区| 国产特黄一级一片免费 | 特a级免费高清黄色片| 亚洲成a人一区二区三区 | 成人毛片18女人毛片免费96| 日本免费A级毛一片| 97久久精品亚洲中文字幕无码| 国产美女无遮挡免费视频网站| 高清一区二区三区免费视频| 国产成人综合亚洲绿色| 亚洲福利一区二区| 亚洲成AV人片在线观看无| www.91亚洲| XXX2高清在线观看免费视频| 亚洲国产综合AV在线观看| 亚洲欧洲日韩不卡| 亚洲五月午夜免费在线视频| 日本高清不卡aⅴ免费网站| 亚洲AV成人片无码网站| 亚洲卡一卡二卡乱码新区| 婷婷亚洲综合五月天小说 | 亚洲jjzzjjzz在线观看| 亚洲Av无码精品色午夜|