Android 사용자 정의 TitleView 제목 개발 실례

10068 단어 androidtitleview표제
Android 개발 과정 에서 같은 스타일 의 제목 표시 줄 을 반복 적 으로 정의 해 야 하 는 프로젝트 를 자주 만 납 니 다.Android 는 actionBar,toolBar 를 연이어 출시 했 습 니 다.유용 한 친구 들 도 뜻 대로 되 지 않 을 때 를 만 날 수 있 습 니 다.예 를 들 어 제목 표시 줄 이 가운데 에 있 을 때 xml 문 서 를 toolBar 에 사용자 정의 해 야 합 니 다.actionBar 를 모 르 면 toolBar 는 해당 하 는 글 을 찾 아 알 수 있 습 니 다.국내 테마 스타일 을 만족 시 키 는 사용자 정의 title Bar 의 상황 을 소개 합 니 다.
효 과 를 미리 보기 위해 먼저 효과 도 를 올 립 니 다.

전기 준비
1.제목 표시 줄 titleView 에 id 를 미리 정의 합 니 다.values 의 ids.xml 에서

<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="tv_title_name" type="id"/>
<item name="tv_left_text" type="id"/>
<item name="iv_left_image" type="id"/>
<item name="iv_right_image" type="id"/>
<item name="iv_right_image_two" type="id"/>
<item name="tv_right_text" type="id"/>
<item name="tv_right_text_two" type="id"/>
</resources>
왼쪽 되 돌아 가기 단추 id,제목 id,뒤쪽 단추 id 를 정의 할 수 있 습 니 다.왼쪽 은 두 가지 상황 으로 나 눌 수 있 습 니 다.ImageView/TextView,오른쪽 에는 두 개의 단추,그림 단추,문자 단추 조합 이 동시에 존재 할 수 있 습 니 다.
2.제목 표시 줄 속성 을 사용자 정의 합 니 다.valuse 의 attr.xml 에서

<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--      -->
<declare-styleable name="TitleAttr">
<attr name="title_name" format="reference|string"/>
<attr name="title_text_color" format="reference|color"/>
<attr name="title_drawable_right" format="reference"/>
<attr name="title_drawable_left" format="reference"/>
<attr name="title_text_size" format="reference|dimension"/>
<attr name="left_text" format="reference|string"/>
<attr name="left_image" format="reference"/>
<attr name="small_text_size" format="reference|dimension"/>
<attr name="title_gravity">
<enum name="left" value="3"/>
<enum name="center" value="17"/>
<enum name="right" value="5"/>
</attr>
<attr name="right_image" format="reference"/>
<attr name="right_text" format="reference|string"/>
<attr name="right_image_two" format="reference"/>
<attr name="right_text_two" format="reference|string"/>
<attr name="title_height" format="dimension"/>
<attr name="right_text_drawable_right" format="reference"/>
<attr name="right_text_drawable_left" format="reference"/>
<attr name="right_text_two_drawable_right" format="reference"/>
<attr name="right_text_two_drawable_left" format="reference"/>
<attr name="left_text_drawable_right" format="reference"/>
<attr name="left_text_drawable_left" format="reference"/>
</declare-styleable>
</resources>
•인 코딩 구현
•앞의 준비 가 있 으 면 인 코딩 을 시작 할 수 있 습 니 다.xml 에서 사용자 정의 컨트롤 을 어떻게 도입 하 는 지 살 펴 보 겠 습 니 다.

<com.jarek.library.TitleView
android:id="@+id/title_main"
android:layout_width="match_parent"
android:background="#0093fe"
title:title_name="  "
title:right_text="@string/more"
title:title_text_color="@android:color/white"
title:right_image_two="@mipmap/icon_crop_rotate"
title:title_text_size="20sp"
title:small_text_size="15sp"
title:left_text="  "
title:left_text_drawable_left="@mipmap/back_normal"
title:right_text_drawable_right="@mipmap/bar_button_right"
android:layout_height="50dp"/>
이 title 탭 은 사용자 정의 입 니 다.우선 RelativeLayout 에서 계승 할 클래스 를 만 듭 니 다.여 기 는 RelativeLayout 를 부모 용기 로 선택 하 였 습 니 다.상대 적 인 위 치 를 제어 하기 위해 서 입 니 다.
우선 TypedArray 대상 을 가 져 와 야 합 니 다.모든 사용자 정의 속성의 값 을 가 져 옵 니 다.

TypedArray typeArray = context.obtainStyledAttributes(attrs, R.styleable.TitleAttr); 
typedArray 대상 을 얻 으 면 용기 에 단 추 를 추가 할 수 있 습 니 다.먼저 왼쪽 의 첫 번 째 반환 단 추 를 보고 추가 하면 코드 를 먼저 볼 수 있 습 니 다.

int leftText = typeArray.getResourceId(R.styleable.TitleAttr_left_text, 0);
CharSequence charSequence = leftText > 0 ? typeArray.getResources().getText(leftText) : typeArray.getString(R.styleable.TitleAttr_left_text);
여기 레프 트text 는 사용자 정의 속성 입 니 다.왼쪽 TextView 에 표 시 된 문자 임 을 나타 냅 니 다.문 자 는 자원 파일 에 있 는 미리 정 의 된 string 일 수도 있 고 문 자 를 직접 입력 할 수도 있 습 니 다.해당 하 는 styleable 을 얻 은 후에 먼저 0 이상 인지,0 이상 은 string 에 정 의 된 것 임 을 판단 합 니 다.typeArray.getResources().getText()를 통 해 값 을 얻 으 면 0 과 같 으 면 바로 값 을 추출 합 니 다.직접 값 을 부여 하 는 방식 으로 값 을 줄 수 있 음 을 나타 낸다.값 을 가 져 온 후에 TextView 에 어떻게 값 을 부여 하 는 지,여 기 는 먼저 그 에 게 폭 을 주어 야 합 니 다.이것 은 모든 컨트롤 이 필요 합 니 다.

/**
* layout params of RelativeLayout
* @return LayoutParams
*/
private LayoutParams initLayoutParams () {
return new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
} 
우 리 는 단독으로 방법 을 하나 쓰 면,후속 으로 바로 통과 할 수 있다.

LayoutParams params = initLayoutParams(); 
미리 설 정 된 너비 와 높 은 값 을 가 져 옵 니 다.부모 컨트롤 을 높이 채 우 고 폭 은 자가 적응 입 니 다.그리고 new TextView 입 니 다.

/**
* create TextView
* @param context Context
* @param id the id of TextView
* @param charSequence text to show
* @param params relative params
* @return the TextView which is inited
*/
@NonNull
private TextView createTextView(Context context, int id, CharSequence charSequence, LayoutParams params) {
TextView textView = new TextView(context);
textView.setLayoutParams(params);
textView.setGravity(Gravity.CENTER);
textView.setId(id);
textView.setMinWidth((int)getPixelSizeByDp(minViewWidth));
textView.setText(charSequence);
return textView;
} 
미리 설 정 된 id 값,표시 할 내용,위 에 주어진 LayoutParams 를 보 여 줍 니 다.TextView 를 만 든 후 TextView 의 Drawable 도 설정 할 수 있 습 니 다.사용자 정의 속성 을 통 해 lefttext_drawable_right,left_text_drawable_left 설정,여 기 는 좌우 설정,상하 대응 설정 가능:

/**
* drawable of TextView
* @param typeArray TypedArray
* @param leftDrawableStyleable leftDrawableStyleable
* @param rightDrawableStyleable rightDrawableStyleable
* @param textView which TextView to set
*/
private void setTextViewDrawable(TypedArray typeArray, int leftDrawableStyleable, int rightDrawableStyleable, TextView textView) {
int leftDrawable = typeArray.getResourceId(leftDrawableStyleable, 0);
int rightDrawable = typeArray.getResourceId(rightDrawableStyleable, 0);
textView.setCompoundDrawablePadding((int)getPixelSizeByDp(drawablePadding));
textView.setCompoundDrawablesWithIntrinsicBounds(leftDrawable, 0, rightDrawable, 0);
} 
여기 도 하나의 방법 을 뽑 아서 통과 했다.

setTextViewDrawable(typeArray, R.styleable.TitleAttr_left_text_drawable_left, R.styleable.TitleAttr_left_text_drawable_right, mLeftBackTextTv); 
지정 한 TextView 에 drawable 을 설정 할 수 있 습 니 다.TextView 를 만 든 후에 앞에서 언급 한 것 은 상대 적 인 레이아웃 입 니 다.위치 규칙 을 지정 해 야 합 니 다.

params.addRule(RelativeLayout.ALIGN_PARENT_LEFT); 
왼쪽 에 표 시 됩 니 다.또한 글꼴 크기 를 설정 할 수 있 습 니 다.사용자 정의 속성:smalltext_size(양쪽 텍스트 크기),titletext_size(제목 텍스트 크기)글꼴 설정:

/**
* get the dimension pixel size from typeArray which is defined in attr
* @param typeArray TypedArray
* @param stylable stylable
* @param defaultSize defaultSize
* @return the dimension pixel size
*/
private float getDimensionPixelSize(TypedArray typeArray, int stylable, int defaultSize) {
int sizeStyleable = typeArray.getResourceId(stylable, 0);
return sizeStyleable > 0 ? typeArray.getResources().getDimensionPixelSize(sizeStyleable) : typeArray.getDimensionPixelSize(stylable, (int)getPiselSizeBySp(defaultSize));
} 
마찬가지 로 여기 도 단독으로 한 가지 방법 을 써 서 만 들 면 TypedArray 의 용법 은 더 이상 설명 하지 않 고 다른 글 을 보면 알 수 있 습 니 다.다음 을 통 해 글꼴 크기 를 설정 합 니 다:

float textSize = getDimensionPixelSize(typeArray, R.styleable.TitleAttr_small_text_size, defaultSmallTextSize);
mLeftBackTextTv.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize); 
텍스트 색상,같은 이치:

/**
* get textColor
* @param typeArray TypedArray
* @return textColor
*/
private int getTextColorFromAttr (TypedArray typeArray) {
int textColorStyleable = typeArray.getResourceId(R.styleable.TitleAttr_title_text_color, 0);
if (textColorStyleable > 0) {
return typeArray.getResources().getColor(textColorStyleable);
} else {
return typeArray.getColor(R.styleable.TitleAttr_title_text_color, textColor);
}
} 
그리고 호출 방법 으로 색상 설정:

mLeftBackTextTv.setTextColor(getTextColorFromAttr(typeArray)); 
여기까지 왼쪽 에 있 는 첫 번 째 문자 버튼 입 니 다.또는 텍스트 에 그림 이 있 는 단 추 를 누 르 면 만 들 수 있 습 니 다.마지막 으로 한 걸음 차이 가 납 니 다.

mLeftBackTextTv.setTextColor(getTextColorFromAttr(typeArray)); 
다른 단 추 는 같은 이치 로 용기 에 순서대로 추가 할 수 있 습 니 다.더 이상 말 하지 않 겠 습 니 다.지금까지 우리 가 필요 로 하 는 title View 를 만 들 었 습 니 다.나중에 사용 하면 바로 호출 할 수 있 습 니 다.모든 곳 에서 중복 되 는 coding 이 필요 없습니다.
프로젝트 주소:github 원본 다운로드
위 와 같이 소 편 이 소개 한 안 드 로 이 드 사용자 정의 Title View 제목 개발 인 스 턴 스 입 니 다.도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.소 편 은 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기