2014-04-09 6 views
6

나는이 이미지처럼 보이게 안드로이드 탭보기를 만들려면 : 3d tab bar3D 모양을 얻으려면 Android 탭을 어떻게 스타일링 할 수 있습니까?

내가 로마에 여러 가지 방법이 있습니다 생각,하지만 난 여전히 이상을 발견하지 않았습니다 생각합니다. 내 생각은 분배기와 활성 분배기를 잘라서 단추 사이에 배치하는 것이었다. 그러나 첫 번째와 마지막 버튼에 다른 스타일이 필요하기 때문에 이것이 좋은 해결책이 될지 모르겠습니다. 주변 (회색) 컨테이너에 대해 이미 9 패치가 있습니다.

나는 또한 빨간색 막대에 빨간색 9 패치를 만드는 방법에 대해 생각해 보았습니다. 선택한 단추의 스타일을 지정하는 것보다 생각했습니다. 이 솔루션의 문제점은 버튼의 수에 따라 상단 대각선 흰색 선을 배치해야한다는 것입니다.

누구에게 더 좋은 해결책이 있습니까?

답변

4

또 다른 접근법은 탭에서 헤더를 분리하는 것입니다. 약간 복잡하지만 그렇습니다. 이점은 다음과 같습니다.

  1. 일반적인 탭 스타일을 정의 할 수 있습니다.
  2. 많은 버튼을 지원합니다. 실제로 추가 ImageView들은 헤더의 왼쪽에 요구 될 수 있도록 버튼, 다른 폭이 그림이다

    Layout

.

헤더 뷰를 LinearLayout으로 만들어 보겠습니다. 우리는 위의 칸막이와 stretchable gap을 같은 layout_weight과 함께 넣을 수 있습니다. 서로 다른 배경을, 개인적으로 나를 위해

R.drawable.header_divider

:

R.drawable.header_bg

그리고 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입니다 처음이자 마지막 버튼은 가장 어려운 해결책이지만, 실제 작업에 따라 다릅니다.