Android 조합 컨트롤 기능 이 강 한 사용자 정의 컨트롤 구현
9387 단어 Android사용자 정의 컨트롤조합 컨트롤
I.기 존의 컨트롤 을 계승 하여 컨트롤 의 기능 을 확대 합 니 다.
II.기 존 컨트롤 을 조합 하여 기능 이 더욱 강 한 컨트롤 을 실현 합 니 다.
Ⅲ、View 를 다시 써 서 새로운 컨트롤 을 실현 합 니 다.
앞에서 말 했 듯 이 기 존의 컨트롤 을 어떻게 계승 하 는 지 는 정의 컨트롤 에서 나 온 것 이다.이 절 에서 우 리 는 두 번 째 의 제 를 토론 한다.어떻게 컨트롤 을 조합 하여 강력 한 사용자 정의 컨트롤 을 실현 합 니까?
조합 컨트롤 을 만 드 는 장점 부터 살 펴 보 자.조합 컨트롤 을 만 들 면 조합 기능 을 가 진 컨트롤 집합 을 잘 만 들 수 있다.그러면 우 리 는 보통 어떻게 하 는 것 입 니까?보통 우 리 는 적당 한 View Group 을 계승 하고 그 에 게 새로운 기능 을 만들어 주 며 새로운 기능 의 컨트롤 을 형성 합 니 다.우 리 는 또한 이 컨트롤 에 새로운 속성 을 지정 하여 그 로 하여 금 매우 좋 은 확장 성 을 가지 게 할 것 이다.자,쓸데없는 말 을 많이 했 습 니 다.다음은 거의 모든 app 에 있 는 컨트롤 인 제목 표시 줄 을 예 로 들 어 조합 컨트롤 방법 을 소개 하 겠 습 니 다.
우선,제목 표시 줄 을 왜 다시 사용 하 는 지 대답 하 겠 습 니 다.
I.응용 프로그램 이 통 일 된 스타일 을 가지 도록 합 니 다.
II.제목 표시 줄 을 다시 사용 하 는 것 도 우리 가 앞으로 제목 표시 줄 을 수정 하 는 것 이 매우 편리 합 니 다.'한 번 의 작성,여기저기 실행'효 과 를 진정 으로 실현 할 수 있 습 니 다.많은 노력 을 들 이지 않 고 모든 페이지 를 수정 할 수 있 습 니 다.
Ⅲ.호출 자 에 게 호출 인 터 페 이 스 를 밖으로 노출 시 켜 제목 표시 줄 을 더욱 유연 하 게 제어 하여 기능 을 더욱 강하 게 한다.
그럼 제목 표시 줄 이 저렇게 생 겼 으 니 다음 그림 을 보십시오.
우 리 는 먼저 간단 한 분석 을 해 보 겠 습 니 다.이것 은 사용자 정의 컨트롤 입 니 다.안 드 로 이 드 의 네 이 티 브 컨트롤 처럼 호출 자가 컨트롤 의 속성 을 설정 하 는 데 편리 해 야 합 니 다.따라서 이 컨트롤 에 속성 을 설정 할 필요 가 있 습 니 다.하나의 View 에 사용자 정의 속성 을 제공 하 는 것 은 매우 간단 합 니 다.res 자원 디 렉 터 리 에 있 는 values 디 렉 터 리 에 attrs.xml 속성 파일 을 만 들 고 이 파일 에서 필요 한 속성 을 정의 하면 됩 니 다.이 사용자 정의 컨트롤 사용자 정의 속성 은 다음 과 같 습 니 다.
<declare-styleable name="titleBar">
<attr name="title" format="string" />
<attr name="titleTextSize" format="dimension" />
<attr name="titleTextColor" format="color" />
<attr name="titleLeftText" format="string" />
<attr name="titleLeftBackground" format="color|reference" />
<attr name="titleLeftTextColor" format="color" />
<attr name="titleRightText" format="string" />
<attr name="titleRightBackground" format="color|reference" />
<attr name="titleRightTextColor" format="color" />
</declare-styleable>
저 희 는I.title―제목 에 대응 하 는 문자
Ⅱ、titleTextSize―제목 에 대응 하 는 텍스트 크기
Ⅲ,titleTextColor―제목 에 대응 하 는 텍스트 색상
Ⅳ、title Left Text―왼쪽 단추 에 대응 하 는 텍스트
V.titleLeft Background―왼쪽 단추 에 대응 하 는 배경
VI、title Left TextColor―왼쪽 단추 에 대응 하 는 텍스트 색상
VII、titleRightText―오른쪽 단추 에 대응 하 는 텍스트
V,titleRightBackground―오른쪽 단추 에 대응 하 는 배경
VI、titleRightTextColor―오른쪽 단추 에 대응 하 는 텍스트 색상
여기 서 지적 해 야 할 것 은 좌우 단추 의 배경,즉 색상 유형 일 수도 있 고 해당 하 는 그림 에 대응 할 수도 있 기 때문에 우 리 는'|'로 서로 다른 속성 을 구분 할 수 있다.
자,사용자 정의 속성 에 대한 정의 가 있 으 니 TitleBar 의 컨트롤 을 사용자 정의 하여 이 정 의 된 속성 값 을 가 져 와 야 합 니 다.상기 에서 우 리 는 일반 조합 컨트롤 이 일반적으로 ViewGroup 컨트롤 과 계승 된다 고 언급 했 습 니 다.여기 서 우 리 는 쉽게 볼 수 있 습 니 다.RelativeLayout 를 계승 하 겠 습 니 다.속성 값 을 어떻게 가 져 옵 니까?시스템 은 TypedArray 를 제공 합 니 다.그러면 데이터 구 조 는 속성 집합 을 쉽게 가 져 올 수 있 습 니 다.속성 을 가 져 오 는 코드 는 다음 과 같 습 니 다.
private void initAttrs(AttributeSet attrs) {
TypedArray ta = this.getContext().obtainStyledAttributes(attrs,
R.styleable.titleBar);
if (ta != null) {
title = ta.getString(R.styleable.titleBar_title);
titleTextSize = ta.getDimension(R.styleable.titleBar_titleTextSize,
16);
titleTextColor = ta
.getColor(R.styleable.titleBar_titleTextColor, 0);
titleLeftText = ta.getString(R.styleable.titleBar_titleLeftText);
titleLeftBackground = ta
.getDrawable(R.styleable.titleBar_titleLeftBackground);
titleLeftTextColor = ta.getColor(
R.styleable.titleBar_titleLeftTextColor, 0);
titleRightText = ta.getString(R.styleable.titleBar_titleRightText);
titleRightBackground = ta
.getDrawable(R.styleable.titleBar_titleRightBackground);
titleRightTextColor = ta.getColor(
R.styleable.titleBar_titleRightTextColor, 0);
ta.recycle();
}
}
여기 서 주의해 야 할 것 은 TypedArray 의 recycle 방법 으로 자원 을 회수 해 야 한 다 는 것 이다.이 조합 컨트롤 에 속성 이 생 긴 후에 다음 과 같이 우리 가 해 야 할 일 은 이 조합 컨트롤 의 단 추 를 텍스트 상자 로 유기 적 으로 조합 하 는 것 입 니 다.조합의 코드 는 다음 과 같 습 니 다.
private void initView() {
leftButton = new Button(getContext());
titleTextView = new TextView(getContext());
rightButton = new Button(getContext());
leftButton.setTextColor(titleLeftTextColor);
leftButton.setBackgroundDrawable(titleLeftBackground);
leftButton.setText(titleLeftText);
rightButton.setTextColor(titleRightTextColor);
rightButton.setBackgroundDrawable(titleRightBackground);
rightButton.setText(titleRightText);
titleTextView.setText(title);
titleTextView.setTextSize(titleTextSize);
titleTextView.setTextColor(titleTextColor);
mLeftLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
mLeftLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
addView(leftButton, mLeftLayoutParams);
mCenterLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
mCenterLayoutParams.addRule(RelativeLayout.CENTER_IN_PARENT);
addView(titleTextView, mCenterLayoutParams);
mRightLayoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
mRightLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
addView(rightButton, mRightLayoutParams);
}
우 리 는 위의 글 에서 일부 속성 을 정의 하 는 것 을 보 았 다.이 조합 컨트롤 을 복사 해서 이 조합 컨트롤 을'피 와 살 이 있다'고 만 들 었 다.이것 은 사용자 정의 컨트롤 이 므 로 UI 모드 입 니 다.모든 호출 자가 좌우 단 추 를 눌 러 야 합 니 다.이 루어 질 수 있 는 것 이 다 를 수 있 습 니 다.우 리 는 인 터 페 이 스 를 밖으로 노출 시 켜 호출 자가 이 두 단 추 를 유연 하 게 제어 하도록 해 야 합 니 다.그러면 인터페이스의 정 의 는 다음 과 같다.
public interface ClickListener {
void Click(int tag);
}
private ClickListener listener;
모드 방법 에서 왼쪽,오른쪽 단추 에 클릭 이 벤트 를 추가 하고 인터페이스의 클릭 방법 을 호출 합 니 다.코드 는 다음 과 같 습 니 다.
private void setListener() {
leftButton.setOnClickListener(this);
rightButton.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (listener != null) {
if (v == leftButton) {
listener.Click(LEFT_BUTTON);
} else if (v == rightButton) {
listener.Click(RIGHT_BUTTON);
}
}
}
코드 에서 우 리 는 왼쪽 단 추 를 눌 렀 는 지 오른쪽 단 추 를 눌 렀 는 지 효과적으로 판단 합 니 다. 이 모드 방법 에서 인터페이스의 정의 가 나 온 후에 우 리 는 외부 에서 이 리 셋 코드 를 다음 과 같이 호출 합 니 다.
titleBar.setListener(new ClickListener() {
@Override
public void Click(int tag) {
switch (tag) {
case TitleBar.LEFT_BUTTON:
Toast.makeText(MainActivity.this, " ", 0).show();
break;
case TitleBar.RIGHT_BUTTON:
Toast.makeText(MainActivity.this, " ", 0).show();
break;
default:
break;
}
}
});
이렇게 하면 외부 에서 좌우 버튼 의 클릭 이 벤트 를 효과적으로 제어 할 수 있 습 니 다.이렇게 많이 했 는데 이 조합 컨트롤 을 효과적으로 호출 할 수 있 기 를 바 랍 니 다.조합 컨트롤 을 호출 하 는 코드 는 다음 과 같 습 니 다.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:custom="http://schemas.android.com/apk/res/com.example.test"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
tools:context=".MainActivity">
<!-- <include layout="@layout/topbar" /> -->
<com.example.test.TitleBar
android:id="@+id/titleBar"
android:layout_width="match_parent"
android:layout_height="40dp"
custom:titleLeftBackground="@drawable/blue_button"
custom:titleLeftText="Back"
custom:titleLeftTextColor="#FFFFFF"
custom:titleRightBackground="@drawable/blue_button"
custom:titleRightText="More"
custom:titleRightTextColor="#FFFFFF"
custom:title=" "
custom:titleTextColor="#123412"
custom:titleTextSize="10sp"/>
</RelativeLayout>
사용자 정의 컨트롤 과 네 이 티 브 컨트롤 호출 의 차 이 는 다음 과 같 습 니 다.I.사용자 정의 컨트롤 을 참조 하려 면 완전한 클래스 이름 을 참조 해 야 합 니 다.
II.사용자 정의 컨트롤 사용자 정의 속성 을 참조 할 때 사용자 정의 네 임 스페이스 를 참조 해 야 합 니 다.참조 방법 은 다음 과 같 습 니 다.
xmlns:custom="http://schemas.android.com/apk/res/com.example.test"
이 컨트롤,최종 실행 효 과 는:
이상 은 본문의 전체 내용 이 므 로 여러분 의 학습 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.