AndroidCustomViews

14085 ワード

AndroidCustomViews
Android開発者が使いやすいカスタムコントロールライブラリ
Gradle依存に加わる
implementation 'com.ayvytr:custom-views:0.2.0'
  
compile 'com.ayvytr:custom-views:0.2.0'

カスタムコントロールのリスト
  • NumberPickerViewデジタル選択コントロール、複数行および複数のオプションをサポートするデジタル選択コントロール
  • QuickIndexView通信録右側アルファベット索引コントロール
  • SuperEditTextはワンタッチでクリアでき、アイコンをクリックしてパスワードを表示/非表示にするEditText
  • SingleTextView単行、中央、テキストは1行の末尾で省略されたTextView
  • を超えている.
  • ClearableEditText 0.2.0新たにクリアテキストのEditTextを追加し、AppCompatEditText
  • を直接継承
  • PasswordEditText 0.2.0パスワードの表示/非表示をクリックまたはタッチするEditTextを追加し、AppCompatEditText
  • を直接継承します.
    スクリーンショット(GitHubを見てください.画像はいつもアップロードに失敗します)
    使用と説明
    NumberPickerView NumberPickerViewはandroid原生NumberPickerと類似のインタフェースおよび類似の機能を有するViewである.主な機能は同様に複数の候補から上下スクロールで必要なオプションを選択するが、NumberPickerと比較していくつかの主な相違点があり、以下は両者の相違点である.
    元のコントロールプロパティ-NumberPicker
  • 表示ウィンドウには3つの代替オプションしか表示できません.
  • fling時に抵抗が大きく、速くスライドできない.
  • は、選択された状態と非選択の状態の切り替えが比較的硬い.
  • オプションの内容を一括変更した場合、アニメーション効果はありません.
  • wrapモードを動的に設定すると(setWrapSelectorWheel()メソッド)、「一部のオプションが一時的に表示されない」という問題があります.
  • 選択位置には文字の説明がありません.
  • コードでは、オプションのスライドスクロールを制御できません.

  • カスタムコントロールプロパティ-NumberPickerView
  • 表示ウィンドウには、複数の代替オプションが表示されます.
  • fling時の摺動速度は速く、摩擦力をデフォルト状態の2倍のmNumberPickerView.setFriction(2 * ViewConfiguration.get(mContext).getScrollFriction());
  • とするコードのように設定することができる.
  • 非選択の状態でスライドすると、文字の拡大縮小や色のグラデーションなど、グラデーションのアニメーション効果があります.
  • オプションの内容を一括変更する場合、友好的なスライド効果を採用するかどうかを選択することができる.
  • は、wrapかどうか、すなわち、スクロールを循環するかどうかを動的に設定することができる.
  • 選択位置は文字説明を追加することができ、文字フォントのサイズや色などを制御することができる.
  • は、コード内である位置に動的にスライドする機能を有する.
  • wrap_contentをサポートし、itemのpadding
  • をサポートする.
  • は様々な属性を提供し、UI効果
  • を最適化する.
  • スライド中にonValueChanged()
  • に応答する.
  • 上下セルをクリックすると、対応するクリック対象に自動的にスライドします.
  • は、onValueChangedなどのコールバックインタフェースの実行スレッドを属性設定によって設定することができる.
  • NumberPickerに対応する重要な方法とインタフェース
  • 互換性のある方法は次のとおりです.
    setOnValueChangedListener()
    setOnScrollListener()
    setDisplayedValues()/getDisplayedValues()
    setWrapSelectorWheel()/getWrapSelectorWheel()
    setMinValue()/getMinValue()
    setMaxValue()/getMaxValue()
    setValue()/getValue()
    
            :
    OnValueChangeListener
    OnScrollListener
    
          :
    OnValueChangeListenerInScrolling//       value change
    

    NumberPickerViewの使用方法
  • レイアウト宣言NumberPickerView
  •     
    
    
  • Javaコードで使用:1)設定データ(String[]mDisplayedValues)が変更されない場合は、(NumberPickerの設定方式と一致)
  • を使用して設定できます.
            picker.setMinValue(minValue);
            picker.setMaxValue(maxValue);
            picker.setValue(value);
    

    2)設定データ(String[]mDisplayedValues)が変更された場合は、(NumberPickerの変更データ方式と一致)
            int minValue = getMinValue();
            int oldMaxValue = getMaxValue();
            int oldSpan = oldMaxValue - minValue + 1;
            int newMaxValue = display.length - 1;
            int newSpan = newMaxValue - minValue + 1;
            if (newSpan > oldSpan) {
                setDisplayedValues(display);
                setMaxValue(newMaxValue);
            } else {
                setMaxValue(newMaxValue);
                setDisplayedValues(display);
            }
    

    あるいはNumberPickerViewが提供する方法:refreshByNewDisplayedValues(String[]display)この方法を使用する場合は、データの変更前後のminValue値が変わらないこと、および設定されたdisplayがnullでなく、長さが0でないことに注意する必要があります.3)スライド中にvalue changeに応答する関数を追加
        picker.setOnValueChangeListenerInScrolling(...);
    

    4.さらに、NumberPickerViewは、スムーズにスクロールする方法を提供する:public void smoothScrollToValue(int fromValue, int toValue, boolean needRespond)この方法は、setValue(int)の方法と同様に、現在表示されているitemを動的に設定できる点であり、異なる点は、NumberPickerViewをスクロールから滑らかにすることができ、すなわち、fromValueの値から最も近いパスを選択してtoValueにスクロールすることができ、第3のパラメータneedRespondは、スライドパスでonValueChangedコールバック関数に応答するかどうかを識別するために使用される.複数のNumberPickerViewが連動している場合、異なるNumberPickerViewの停止時間が異なる可能性が高いため、このときにonValueChangedコールバックに応答すると、再び連動してデータが不正確になる可能性があり、needRespondfalseに設定することで、スライド中にコールバック関数に応答することを回避することができる.
    また、このメソッドを使用する場合や間接的に呼び出す場合は、scrollアニメーションに一定の時間がかかるため、onCreate(Bundle savedInstanceState)で呼び出す必要がある場合は、次の方法を使用してください.
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            //    
            mNumberPickerView.post(new Runnable() {
                @Override
                public void run() {
                    //  smoothScrollToValue()      
                }
            });
        }
    

    5.各カスタム属性の説明
        
            //       ,  3 
            //      divider,    
            //  divider   
            //divider      
            //divider      
            //divider   
            //        
            //       
            //            
            //        
            //       
            //       
            //    ,stringarray  
            //   , setMinValue()
            //   , setMaxValue()
            //    wrap, setWrapSelectorWheel
            //      
            //       ,         。  WrapSelectorWheel==false    
            //           ,"  "    array  item   
            //           
            //item   padding,  wrap_content  
            //item   padding,  wrap_content  
            // detach   NumberPickerView    ,  
            //    onValueChange  ,    Dialog/PopupWindow     ,
            //                 。  Dialog/PopupWindow            ,       false
            //  `onValueChanged`            。
            //   `true`,        。     `false`        。
    
            //       wrap_content   ,    array        "  ",                   
            
            //         ,        ,         String     
            //         ,         ,         String   +    +    marginstart +    marginend   
            
            //         
        
    
    

    QuickIndexView
    レイアウトファイルにQuickIndexViewを追加し、カスタム属性を追加するか、コードにカスタム属性を動的に作成して設定すればよい
    
    

    APIドキュメント
    clearIndexList()          .
    getGravity()             indexList Gravity
    getIndexList()         indexList
    getLineSpacing()             
    getTextColor()             textColor
    getTextSize()             
    setGravity(int gravity)        ,   Gravity.TOP, Gravity.CENTER,Gravity.CENTER_VERTICAL  ,                   .
    setIndexArray(String[] letterArray)        indexList
    setIndexList(List indexList)       indexList
    setLineSpacing(int lineSpacing)          
    setOnLetterChangeListener(OnLetterChangeListener onLetterChangeListener)               
    setTextColor(int textColor)        textColor
    setTextSize(int textSize)         ,            ,        0,     .
    

    カスタム属性テーブル
    android:textColor       
    android:textSize        
    android:background    
    android:gravity           (                 )
    android:lineSpacingExtra              
    indexArray                
    

    SuperEditText
    APIドキュメント
    addTextChangedListener(TextWatcher watcher)          
    getText()         
    setClearIcon(Drawable drawable)         
    setClearIcon(int id)            
    setFocusChangeListener(View.OnFocusChangeListener l)             
    setHint(int id)       
    setHint(String hint)          
    setKeyListener(KeyListener keyListener)        
    setSelection(int index)       
    setText(int id)     
    setText(String text)        
    

    カスタム属性テーブル
        
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
        
    

    ClearableEditText
    APIドキュメント
    getClearTextDrawable()     Drawable
    isShowClearDrawableNoFocus()            Drawable
    setClearTextDrawable(Drawable clearTextDrawable)     Drawable
    setClearTextDrawable(int drawableId)     Drawable
    setShowClearDrawableNoFocus(boolean showClearDrawableNoFocus)              Drawable
    

    カスタム属性テーブル
    
                      Drawable
    
    

    PasswordEditText
    APIドキュメント
    getHidePasswordDrawable()       Drawable
    getShowPasswordDrawable()       Drawable
    isPasswordInputType(int inputType)            .
    isShowDrawableNoFocus()             Drawable.
    setClickMode(boolean clickMode)       /  Drawable  
    setHidePasswordDrawable(Drawable hidePasswordDrawable)       Drawable
    setHidePasswordDrawable(int hidePasswordDrawableId)       Drawable
    setShowDrawableNoFocus(boolean showDrawableNoFocus)             Drawable
    setShowPasswordDrawable(android.graphics.drawable.Drawable showPasswordDrawable)       Drawable
    setShowPasswordDrawable(int showPasswordDrawableId)       Drawable
    

    カスタム属性テーブル
        
                  Drawable
                  Drawable
                       Drawable
                   ,true:    ,        ;false:    ,      
                       Drawable
        
    

    ChangeLog
  • 0.1.0
  • NumberPickerView
  • QuickIndexView
  • SuperEditText
  • SingleTextView

  • 0.2.0
  • ClearableEditText
  • PasswordEditText


  • TODO
  • SuperEditTextカスタム属性が多すぎて、
  • の最適化と再設計が必要です.
  • カスタムView
  • を追加
  • カスタムTabLayout
  • 試験用例(Espressoなどの試験に熟練した大神の意見や推薦資料を歓迎する)
  • もっとカスタマイズしたいコントロールはGithub提IssueかPull Requestでお願いします!
    ここまで見えましたので、スターを注文してください.ありがとうございます!