Android Boss 직 고용 텍스트 날짜 혼합 롤러 선택 기 예시
GitHub 에는 iOS 스타일 의 롤러 선택 기 Android-PickerView 이 있 습 니 다.시간 선택 기 코드
TimePickerView
과 옵션 선택 기 OptionsPickerView
으로 나 뉘 는데 시간 날 짜 를 선택 할 수 있 을 뿐만 아니 라 성별,연령 등 사용자 정의 데 이 터 를 선택 할 수 있 습 니 다.나 는 줄곧 그것 을 썼 다.최근 에 수요 가 생 겼 습 니 다.이 옵션 은 문자 도 있 고 시간 도 있 습 니 다.대체적으로 Boss 직 고용 이 프로젝트 경험 에서 의 시간 선택 기능 을 추가 하 는 것 과 같 습 니 다.그림 에서 알 수 있 듯 이 일반적인 연도 와 달의 선택 을 제외 하고 옵션 에 텍스트 도 포함 되 어 있다.그 중에서 최신 시간 은'지금까지'이 고 가장 먼저 선택 할 수 있 는 시간 은'1900 이전'이다.그래서
TimePickerView
과 OptionsPickerView
모두 이 기능 을 실현 하지 못 하 는 것 처럼 보인다.우 리 는 모두 이번 에는 컨트롤 을 사용자 정의 하거나 Android-PickerView 라 이브 러 리 를 수정 해 야 한다 고 낙담 했다.그런데 왜'시간 선택'과'옵션 선택'을 그렇게 나 누 었 을 까?시간 선택 도 선택 이 잖 아.예 를 들 어 저 는 2017 년 12 월 을 선택 하 겠 습 니 다.그것 은 바로 년도 에서 2017 을 선택 하고 달 에서 12 를 선택 하 는 것 입 니 다.1 급 옵션 과 2 급 옵션 만 설정 하면 됩 니 다.2.옵션 구조 분석
사고방식 이 생 긴 후에 우 리 는 옵션 의 데이터 구 조 를 분석 해 보 자.연 도 는 세 가지 상황 으로 나 눌 수 있다.
햇수
월.
최신 년도"지금까지"
최신 년도"지금까지"
현재 연도
1~현재 월
1990~현재 년도-1
월 1~12
최초 년도"1990 이전"
최초 달"1990 이전"
3.코드 작성
코드 를 쓰기 전에 GitHub 에 가서 Android-PickerView 의 사용 방법 을 살 펴 보 는 것 이 좋 습 니 다.구조 자 모드 를 사용 하여 사용 하기 가 간단 합 니 다.
이제 우리 의 코드 를 쓰기 시작 했다.
3.1 인터페이스 레이아웃
레이아웃 은 버튼 입 니 다.클릭 한 후 롤러 선택 기 를 꺼 내 고 선택 한 후 클릭 하여 곧 데이터 가 TextView 에 표 시 될 지 확인 합 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:textAllCaps="false"
android:text=" PickerView"
android:onClick="showPickerView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/tv_time"
android:textSize="16sp"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
3.2 Activity 코드강력 한 PickerView 를 통 해 우 리 는 실현 하기 가 매우 간단 합 니 다.다음 코드 를 보십시오.
public class MultipleOptionActivity extends AppCompatActivity {
private TextView tvTime;
/**
* 1~12
*/
private List<String> monthList = new ArrayList<>();
/**
*
*/
private List<String> optionYears = new ArrayList<>();
/**
*
*/
private List<List<String>> optionMonths = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multiple_option);
tvTime = (TextView) findViewById(R.id.tv_time);
initData();
}
/**
*
*/
private void initData() {
// , 1~12
for (int i = 1; i <= 12; i++) {
monthList.add(String.valueOf(i));
}
Calendar calendar = Calendar.getInstance();
int curYear = calendar.get(Calendar.YEAR);
// 0~11, 1
int curMonth = calendar.get(Calendar.MONTH) + 1;
for (int i = curYear + 1; i >= 1989; i--) {
//
List<String> tempMonths = new ArrayList<>();
if (i == curYear + 1) {
// “ ”
optionYears.add(" ");
tempMonths.add(" ");
optionMonths.add(tempMonths);
} else if (i == curYear) {
//
optionYears.add(String.valueOf(i));
for (int j = 1; j <= curMonth; j++) {
tempMonths.add(String.valueOf(j));
}
optionMonths.add(tempMonths);
} else if (i == 1989) {
// “1900 ”
optionYears.add("1990 ");
tempMonths.add("1990 ");
optionMonths.add(tempMonths);
} else {
//
optionYears.add(String.valueOf(i));
optionMonths.add(monthList);
}
}
}
/**
*
*
* @param view
*/
public void showPickerView(View view) {
OptionsPickerView multipleOp = new OptionsPickerView.Builder(this, new OptionsPickerView.OnOptionsSelectListener() {
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
if (options1 == 0 || options1 == optionYears.size() - 1) {
// ,
tvTime.setText(optionYears.get(options1));
} else {
// ,
tvTime.setText(new StringBuffer(optionYears.get(options1)).append("―").append(monthList.get(options2)));
}
}
}).setTitleText(" ")
.build();
multipleOp.setPicker(optionYears, optionMonths);
multipleOp.show();
}
}
코드 가 매우 적 고 주석 도 잘 썼 으 니 여러분 들 이 쉽게 이해 하 실 거 라 고 믿 습 니 다.우 리 는 OptionsPickerView
의 setPicker
방법 에 중점 을 두 었 다.이 방법 은 세 개의 매개 변 수 를 전달 할 수 있 고 모든 매개 변 수 는 집합 이지 만 매개 변수의 유형 은 다르다.첫 번 째 매개 변 수 는 List
이 고 두 번 째 매개 변 수 는 List<List>
이 며 세 번 째 매개 변 수 는 List<List<list>>
이다.여기 서 보면 알 수 있 듯 이 우리 가 매년 대응 하 는 월 데 이 터 는 하나의 집합(물론 집합 크기 가 다르다)이다.예 를 들 어 년도 2017,대응 하 는 달 은 12 개의 요소 의 집합 이다.이 점 을 정리 한 후에 initData
방법 에서 데이터 에 대한 설정 도 이해 했다.마지막 으로 TextView 에 데 이 터 를 표시 할 때 자 연 스 럽 게 분 류 됩 니 다.'지금까지'와'1990 이전'에 대해 우 리 는 지금까지 텍스트 를 표시 하고 다른 것 은 다시 연결 하면 시간 처럼 보이 면 됩 니 다.
우리 가 마지막 으로 실현 한 효과 도 를 보 자.
4.총화
프로젝트 에서 좋 은 제3자 라 이브 러 리 를 사용 하면 우리 의 개발 시간 을 크게 절약 할 수 있 지만 사용 과정 에서 도 유연 해 야 한다.예 를 들 어 우 리 는 한 페이지 에서 롤러 선택 기(예 를 들 어 시작 시간 과 끝 시간 선택)를 여러 번 사용 해 야 한다.그러면 매번 롤러 의 스타일 을 설정 하고 클릭 이 벤트 를 한 번 쓰 는 것 도 너무 번거롭다.이때,우 리 는 롤러 스타일 의 설정 코드 를 추출 할 수 있다.
/**
*
* @return
*/
private OptionsPickerView.Builder createBuilder(){
OptionsPickerView.Builder builder = new OptionsPickerView.Builder(MultipleOptionActivity.this,this)
.setBgColor(ContextCompat.getColor(this,R.color.colorAccent))
.setSubmitText(" ")
.setCancelText(" ");
//
return builder;
}
그리고 롤러 를 표시 할 때 이렇게 쓰 면:
OptionsPickerView op = createBuilder().build();
op.setPicker( 1, 2);
op.show();
클릭 이벤트 도 봉인 할 수 있 습 니 다.우리 의 Activity 가 OptionsPickerView.OnOptionsSelectListener
을 계승 한 다음 에 클릭 이 벤트 를 실현 할 수 있 습 니 다.
/**
*
* @param options1
* @param options2
* @param options3
* @param v
*/
@Override
public void onOptionsSelect(int options1, int options2, int options3, View v) {
switch (v.getId()){
// Id
case R.id.btn_show:
break;
default:
break;
}
}
그렇다면 OptionsPickerView
은 View 를 클릭 한 아 이 디 를 어떻게 얻 었 을 까?우 리 는 show
방법 을 호출 할 때 View 를 클릭 한 대상 을 입력 하면 된다.이상 은 저의 개인 적 인 소감 입 니 다.여러분 에 게 도움 이 되 기 를 바 랍 니 다.마지막 으로 소스 코드 주세요:소스 코드
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.