또 다른 접근법은 탭에서 헤더를 분리하는 것입니다. 약간 복잡하지만 그렇습니다. 이점은 다음과 같습니다.
- 일반적인 탭 스타일을 정의 할 수 있습니다.
- 많은 버튼을 지원합니다. 실제로 추가
ImageView
들은 헤더의 왼쪽에 요구 될 수 있도록 버튼, 다른 폭이 그림이다 ![Layout](https://i.stack.imgur.com/sXkd4.png)
.
헤더 뷰를 LinearLayout으로 만들어 보겠습니다. 우리는 위의 칸막이와 stretchable gap을 같은 layout_weight
과 함께 넣을 수 있습니다. 서로 다른 배경을, 개인적으로 나를 위해
![R.drawable.header_divider](https://i.stack.imgur.com/wx7v1.png)
:
![R.drawable.header_bg](https://i.stack.imgur.com/RqUEP.png)
그리고 R.drawable.header_divider
간단한 (선택적으로 투명) 비트 맵 : R.drawable.header_bg
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);
}
}
는 9patch입니다 처음이자 마지막 버튼은 가장 어려운 해결책이지만, 실제 작업에 따라 다릅니다.