EP 26-BottomNavigationの改良
2282 ワード
BottomNavigationの改良
SimpleBottomNavigationBarはまずFrameLayoutをLinearLayoutに変更します.これは、tabを動的に追加するために
Viewの構築方法
各カスタマイズされたView/View Groupには、通常、このカスタマイズされたコントロールが使用できる3つの構築方法があります.
最初のコンストラクション関数が2番目のコンストラクション関数を呼び出し,2番目のコンストラクション関数が3番目のコンストラクション関数を呼び出すのを見ることができる.コード内で1つのCustom Viewインスタンスを直接newすると、最初のコンストラクション関数が呼び出されます. xmlレイアウトファイルでCustom Viewを呼び出すと、2番目のコンストラクション関数が呼び出されます.attrsはxmlでviewに設定したプロパティです. xmlレイアウトファイルでCustom Viewが呼び出され、Custom Viewラベルにカスタム属性がある場合、ここで呼び出されるのは2番目のコンストラクション関数です.
それなら、カスタムViewの初期化操作を2番目または3番目のコンストラクション関数に入れることができます.結局、私たちのViewは
ViewHolder思想
昨日私はとても愚かな方法を使って、すべてのtabのViewをすべて初期化して、全部で10個余りあって、大量の初期化方法を書きました.今日は一人の人が書いたものを参考にして、彼は
そしてonClickでViewHodlerListのviewHodlerをポーリングし、選択したtabをハイライト表示し、選択していないtabの元のスタイルを復元します.
まだ完全に書き終わっていないので、まだいくつかのバグがあります.明日にしましょう.
-DEC27
SimpleBottomNavigationBarはまずFrameLayoutをLinearLayoutに変更します.これは、tabを動的に追加するために
addView()
を使用するためです.Viewの構築方法
各カスタマイズされたView/View Groupには、通常、このカスタマイズされたコントロールが使用できる3つの構築方法があります.
/**
*
*/
public CustomView(Context context) {
this(context, null);
}
/**
*
*/
public CustomView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
/**
*
*/
public CustomView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO:
}
最初のコンストラクション関数が2番目のコンストラクション関数を呼び出し,2番目のコンストラクション関数が3番目のコンストラクション関数を呼び出すのを見ることができる.
それなら、カスタムViewの初期化操作を2番目または3番目のコンストラクション関数に入れることができます.結局、私たちのViewは
xml
に書かれているので、必ず2番目のコンストラクション関数を呼び出します.詳細はこちらをご覧ください.ViewHolder思想
昨日私はとても愚かな方法を使って、すべてのtabのViewをすべて初期化して、全部で10個余りあって、大量の初期化方法を書きました.今日は一人の人が書いたものを参考にして、彼は
ViewHolder
を使って各Tabの下のTextView
、ImageView
などを含んでいます. public static class ViewHolder {
public BottomNavItem bottomNavItem;
public ImageView tabIcon;
public TextView tabTitle;
}
そしてonClickでViewHodlerListのviewHodlerをポーリングし、選択したtabをハイライト表示し、選択していないtabの元のスタイルを復元します.
for (ViewHolder holder : mViewHolderList) {
// , ,
if (viewHolder.bottomNavItem.mText.equals(holder.bottomNavItem.mText)) {
holder.tabIcon.setImageResource(holder.bottomNavItem.drawableSelected);
holder.tabTitle.setTextColor(Color.RED);
mOnTabSelectedListener.onTabSelected(holder.bottomNavItem.mText);
} else {
holder.tabIcon.setImageResource(holder.bottomNavItem.drawableUnselected);
holder.tabTitle.setTextColor(Color.BLACK);
}
まだ完全に書き終わっていないので、まだいくつかのバグがあります.明日にしましょう.
-DEC27