AndroidカスタムactionBar、titleBar

私は初めてブログを書き、カスタムカスタムバーバーコントロールを書きました。

最初に効果を出しましょう

実装は次のように非常に簡単です

private void bindData(){ 
    barbar1.addMiddleViewExist(barbar1.getTextView( "¸题1")); 


    barbar2.addMiddleViewExist(barbar2.getTextView( "¸题2")); 
    barbar2.addLeftView(barbar2.getImageView(R.mipmap.back)); 

    barbar3.addMiddleViewExist(barbar3.getTextView( "¸题3")); 
    barbar3.addLeftView(barbar3.getImageView(R.mipmap.back)); 
    barbar3.addLeftView(barbar3.getImageView(R.mipmap.back)); 


    barbar4.addLeftView(barbar4.getImageView(R.mipmap.back)); 
    barbar4.addMiddleViewExist(barbar4.getTextView( "¸题4")); 
    barbar4.addRightView(barbar4.getTextView( "右1")); 
    barbar4.addRightView(barbar4.getTextView( "右2")); 

    barbar5.addMiddleViewExist(barbar5。
    barbar5.addLeftView(barbar5.getTextView( "左1")); 
    barbar5.addLeftView(barbar5.getTextView( "左2")); 
    barbar5.addRightView(barbar5.getImageView(R.mipmap.add)); 
    barbar5.addRightView(barbar5.getTextView( "右2")); 
    barbar5.addRightView(barbar5.getTextView( "右3")); 


    barbar6.addMiddleViewExist(barbar6.getTextView( "¸题6")); 
    barbar6.addLeftView(barbar6.getTextView( "左1")); 
    barbar6.addLeftView(barbar6.getTextView( "左2")); 
    barbar6.addLeftView(barbar6.getTextView( "左3")); 
    barbar6.addRightView(barbar6.getImageView(R.mipmap.add)); 
    barbar6.addRightView(barbar6.getTextView( "右2")); 
    barbar6.addRightView(barbar6。
    barbar6.addRightView(barbar6.getTextView( "右4")); 
}

主にダイナミックコントロールディスプレイ、強力なスケーラビリティ

上位制御コード.......。

/ ** 
 * addLeftView順番に並べられた左側のコントロールを
 追加します* addRightView順番に並べられた右側のコントロールを追加します
 * addMiddleViewExist同時に許可されるミドルコントロールを追加し
 ます
 ** @author fmh 
 * / 
public class CustomBarbar extends RelativeLayout { 
    private ArrayList < ViewItem> views = new ArrayList <>(0); 
    / 
    ***
     ギャップ
     * / 
    private int gap = 0; 
public CustomBarbar(Context context){ 
        super(context); 
    } 

    public CustomBarbar(Context context、AttributeSet attrs){ 
        super( context、attrs); 
        init(attrs); 
    }
 
    public CustomBarbar(Context context、AttributeSet attrs、int defStyleAttr){
        super(context、attrs、defStyleAttr); 
        init(attrs); 
    }
    }

    private void init(AttributeSet attrs){ 
        TypedArray a = getContext()。obtainStyledAttributes(attrs、R.styleable.CustomBarbar); 
        ギャップ= a.getDimensionPixelSize(R.styleable.CustomBarbar_gap、10); 
        a.recycle(); 
    } 


    public View addLeftView(View view){ 
        return addCustomView(view、Model.LEFT); 
    } 

    public View addRightView(View view){ 
        return addCustomView(view、Model.RIGHT); 
    } 

    public View addMiddleViewExist(View view){ 
        return addCustomView(view、Model.MIDDLE); 

    プライベートビューaddCustomView(ビュービュー、モデルモデル){
        LayoutParams lp = new LayoutParams(LayoutParams.WRAP_CONTENT、LayoutParams.WRAP_CONTENT); 
        lastViewByModelを表示= null; 
        intルール= ALIGN_PARENT_LEFT; 
        switch(model){ 
            case LEFT:
                rule = ALIGN_PARENT_LEFT; 
                ブレーク; 
            ケースRIGHT:
                ルール= ALIGN_PARENT_RIGHT; 
                ブレーク; 
            ケースMIDDLE:
                ルール= CENTER_IN_PARENT; 
                ブレーク; 
        }  
        for(ViewItem item:views){ 
            if(item.model == model){
                lastViewByModel = item.view; 
            } 
        } 
        //中間隔只允许放一 
        if(model == Model.MIDDLE && lastViewByModel!= null){ 
            removeView(lastViewByModel); 
            lastViewByModel = null; 
        } 

        if(lastViewByModel == null){ 
            lp.addRule(rule); 
        } else {
            スイッチ(モデル){
                ケース左:
                    lp.leftMargin =ギャップ; 
                    lp.addRule(RIGHT_OF、lastViewByModel.getId()); 
                    ブレーク; 
                ケース右:
                    lp.rightMargin =ギャップ;
                    lp.addRule(LEFT_OF、lastViewByModel.getId()); 
                    ブレーク; 
                ケース中:
                    ブレーク; 
            } 

        }

        lp.addRule(CENTER_VERTICAL); 
        addView(view、lp); 
        views.add(new ViewItem(view、model)); 
        view.setId(views.size()); 
        ビューを返す; 
    } 

    / ** 
     *获取のTextView 
     * 
     * @paramテキスト
     * @return 
     * /
    公共のTextView getTextView(文字列テキスト){
        if(resId!= NO_ID){
        のTextViewのTextView =新規のTextView(のgetContext())。
        textView.setText(text);
        textViewを返します。
    } 

    / 
     ***获取
     ImageView 
     * 
     * @param resId * @return 
     * / 
    public ImageView getImageView(int resId){ 
        ImageView imageView = new ImageView(getContext()); 
            imageView.setImageResource(resId); 
        } 
        return imageView; 
    }

    プライベートクラスViewItem {
        パブリックビュービュー; 
        public Model model = Model.LEFT; 

        public ViewItem(View view、Model model){ 
            this.view = view; 
            this.model =モデル; 
        } 

    } 

    public enum Model {
        左、中、右
    } 

}
 

 

 

addLeftView(View) 以下に示すように、左側に順番に配置されたコントロールを追加します

 

addRightView(View) 以下に示すように、右側に順番に配置されたコントロールを追加します

addMiddleViewExist(View)ミドルコントロールを追加し、同時に1つだけ許可します

 

方法はその名の通りで、コードロジックもとてもシンプルです。もっとご意見をいただければ幸いです。

 

コントロールでgetImageViewとgetTextViewを定義しましたが、これら2つはより頻繁に使用されます。他のコントロールを追加することで、対応するコントロールを初期化できます。

以前は主に携帯電話システムの研究開発を行っていましたが、最近はアプリを書き始めたので、一般的なことをいくつか書きます。

githubアドレス:https//github.com/ff525257/custombarbar

 

おすすめ

転載: blog.csdn.net/fffff525257/article/details/108896782