Ecco un altro approccio: separare l'intestazione dalle schede. Un po 'complicato, sì, ma i vantaggi sono:
- Permette di definire lo stile delle schede comuni;
- Supporta qualsiasi numero di pulsanti.
Su questa immagine i pulsanti sono di diversa larghezza, quindi in realtà un ulteriore ImageView
può essere necessario alla sinistra dell'intestazione.
Creiamo la nostra vista di intestazione come LinearLayout. Possiamo mettere i divisori superiori e gli spazi vuoti estensibili con lo stesso layout_weight
.
public class HeaderLayout extends LinearLayout {
public HeaderLayout(Context context) {
super(context);
initView();
}
public HeaderLayout(Context context, AttributeSet attrs) {
super(context, attrs);
initView();
}
public void setNumberOfColumns(int number) {
removeAllViews();
for (int i = 0; i < number; i++) {
addView(getColumnView(), getColumnLayoutParams());
// We don't need a divider after the last item
if (i < number - 1) {
addView(getDividerView(), getDividerLayoutParams());
}
}
}
private void initView() {
setBackgroundResource(R.drawable.header_bg);
}
private View getColumnView() {
return new View(getContext());
}
private View getDividerView() {
ImageView dividerView = new ImageView(getContext());
dividerView.setImageResource(R.drawable.header_divider);
dividerView.setScaleType(ImageView.ScaleType.FIT_XY);
return dividerView;
}
private LayoutParams getColumnLayoutParams() {
return new LayoutParams(0, LayoutParams.MATCH_PARENT, 1.0f);
}
private LayoutParams getDividerLayoutParams() {
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
}
}
Dove R.drawable.header_bg
è un 9patch:
E R.drawable.header_divider
è un semplice (opzionalmente trasparente) bitmap:
Per me personalmente, rendendo sfondo diverso per il primo e l'ultimo pulsante è la soluzione meno difficile, ma è così dipende dal compito reale.
fonte
2014-04-09 12:29:42