私は初めてブログを書き、カスタムカスタムバーバーコントロールを書きました。
最初に効果を出しましょう
実装は次のように非常に簡単です
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