最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
[Android學習筆記四]自定義Android組件之組合方式創(chuàng)建密碼框組件

   Android中所有控件(也稱組件)都繼承自adnroid.view.View類,android.view.ViewGroup是View類的重要子類,絕大多書的布局類就繼承自ViewGroup類。

作為一家“創(chuàng)意+整合+營銷”的成都網(wǎng)站建設機構,我們在業(yè)內良好的客戶口碑。創(chuàng)新互聯(lián)提供從前期的網(wǎng)站品牌分析策劃、網(wǎng)站設計、成都做網(wǎng)站、成都網(wǎng)站設計、創(chuàng)意表現(xiàn)、網(wǎng)頁制作、系統(tǒng)開發(fā)以及后續(xù)網(wǎng)站營銷運營等一系列服務,幫助企業(yè)打造創(chuàng)新的互聯(lián)網(wǎng)品牌經(jīng)營模式與有效的網(wǎng)絡營銷方法,創(chuàng)造更大的價值。

   參見:基于Android Api21的View和Widget類圖

 

   自定義Android組件基本可以從2個入口著手,一是繼承Viewe類拿起畫筆和畫布繪制組件,而是通過繼承View的子類和組合已有的組件的方式構造自定義的組件。

   本文通過自定義一個PassWordView組件來實現(xiàn)密碼能夠通過點擊點選框來決定是否顯示。PassWordView組件類通過繼承LinearLayout類和組合EditText,CheckBox組件實現(xiàn)。

   效果如下圖:

 

[Android學習筆記四] 自定義Android組件之組合方式創(chuàng)建密碼框組件[Android學習筆記四] 自定義Android組件之組合方式創(chuàng)建密碼框組件


一: 實現(xiàn)上述密碼框組件需要以下步驟:

   a. 設計PassWordView組件

   b. 自定義樣式屬性,res/value/attrs.xml

   c. 創(chuàng)建PassWordView

   c. 實現(xiàn)PassWordView的功能,如:事件,屬性設置,組合組件

二: 使用密碼框組件:

   a. 使用PassWordView組件,設置屬性

   b. 在Activity中對其進行操作

 

三: 案例:

 1.  密碼框組件主要是組合EditText和CheckBox組件,通過CheckBox的選中狀態(tài)來決定密碼是否顯示為明文,EditText和CheckBox組件要求并列一行。故采用LinearLayout布局。

 2.  密碼框組件的自定義樣式屬性,通常根據(jù)具體需要來定義。

    PassWordView自定義組件中稱EditText為left Component(左組件),CheckBox為right Component(右組件)。

  

    定義樣式屬性(位置文件:res/value/attrs.xml):

    



        
        

        
        
        

    

   

    其中inputType使用了android系統(tǒng)已經(jīng)定義的屬性,注意書寫格式。

 3. 實現(xiàn)PassWordView類

  

package secondriver.viewlibrary;

import android.content.Context;
import android.content.res.TypedArray;
import android.text.InputType;
import android.text.method.HideReturnsTransformationMethod;
import android.text.method.PasswordTransformationMethod;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.LinearLayout;


/**
 * PassWordView
 * 

 * leftComponent是一個EditText  * RightComponent是一個CheckBox  * 

 * Author : secondriver  * Created : 2015/11/25  */ public class PassWordView extends LinearLayout {     private EditText mPassWordEditText;     private CheckBox mShowCheckBox;     private LinearLayout.LayoutParams mPassWordParams;     private LinearLayout.LayoutParams mShowParams;     private float leftComponentWeight;     private float rightComponentWeight;     private int inputType;     public PassWordView(Context context, AttributeSet attrs) {         super(context, attrs);         initProperty(context, attrs);         initComponent(context);     }     private final void initProperty(Context context, AttributeSet attrs) {         //獲取設置的值,未設置使用默認值         TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.PassWordView);         leftComponentWeight = typedArray.getFloat(R.styleable.PassWordView_left_component_weight, 5.0f);         rightComponentWeight = typedArray.getFloat(R.styleable.PassWordView_right_component_weight, 1.0f);         //來自Android系統(tǒng)已定義的屬性         inputType = typedArray.getInt(R.styleable.PassWordView_android_inputType, InputType.TYPE_TEXT_VARIATION_PASSWORD);         typedArray.recycle();     }     private void initComponent(Context context) {         mPassWordEditText = new EditText(context);         mPassWordEditText.setInputType(inputType);         mPassWordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());         mShowCheckBox = new CheckBox(context);         //通過權重來決定EditText和CheckBox占據(jù)父視圖的空間的比例         mPassWordParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, leftComponentWeight);         mShowParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, rightComponentWeight);         //父視圖是一個容器視圖,指定水平排列子視圖         setOrientation(HORIZONTAL);         addView(mPassWordEditText, mPassWordParams);         addView(mShowCheckBox, mShowParams);         addCheckBoxListener();     }     /**      * 獲取PassWord      *      * @return      */     public String getPassWord() {         return mPassWordEditText.getText().toString();     }     /**      * 獲取PassWord組件      *      * @return      */     public EditText getPassWordEditText() {         return mPassWordEditText;     }     private final void addCheckBoxListener() {         /**          * CheckBox點擊事件處理          *          * 如果選中EditText中的密碼明文顯示          *          * 如果未選中EditText中的密碼黑點顯示          *          */         mShowCheckBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {             @Override             public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {                 if (isChecked) {                     mPassWordEditText.setTransformationMethod(HideReturnsTransformationMethod.getInstance());                 } else {                     mPassWordEditText.setTransformationMethod(PasswordTransformationMethod.getInstance());                 }             }         });     } }

 4. 使用PassWordView組件

   文件:activity_combine_view.xml

  




    

    
    

  

   文件:CombinePassWordViewActivity.java

 

package secondriver.sdk.activity;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import secondriver.sdk.R;
import secondriver.viewlibrary.PassWordView;

/**
 * Author : secondriver
 * Created : 2015/11/25
 */
public class CombinePassWordViewActivity extends Activity {

    private PassWordView mPassWordView;
    private TextView mPassWordTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_combine_view);

        mPassWordView = (PassWordView) findViewById(R.id.password_view);
        mPassWordTextView = (TextView) findViewById(R.id.password_text_view);
    }

    public void onShowPassWord(View view) {
        mPassWordTextView.setText(mPassWordView.getPassWord());
    }
}

   AndroidManifest.xml中添加CombinePassWordViewActivity即可。

 5.結果

    如文中一開始展示的效果圖

 6. 總結

   

    本文主要演示的通過組合的方式實現(xiàn)自定義Android組件,一般情況通過組合已有的的組件來實現(xiàn)復雜組件相對更容易一些,也能夠得到組件重用的福利;現(xiàn)有組件不能滿足的情況下可以考慮繪制組件,該方式最為原始和靈活。


網(wǎng)站名稱:[Android學習筆記四]自定義Android組件之組合方式創(chuàng)建密碼框組件
文章起源:http://fisionsoft.com.cn/article/ipoici.html