Android 프로 그래 밍 이 실 현 된 간단 한 경로 내 비게 이 션 바 기능 예시
그림 에서 보 여 준 경로 내 비게 이 션 바 와 같이 파일 관리자 와 유사 한 효 과 를 실현 합 니 다.
이 네 비게 이 션 바 는 세 가지 기능 을 포함 합 니 다.
1.임의의 하위 경 로 를 추가 하 는 것 을 지원 합 니 다.(텍스트 한 줄 을 쓸 수 없 을 때 좌우 로 미 끄 러 질 수 있 습 니 다.)
2.이전 경로 로 돌아 가 는 것 을 지원 합 니 다.
3.중간 에 있 는 경 로 를 클릭 하여 지정 한 위치 로 돌아 가 는 것 을 지원 합 니 다.
코드 는 간단 합 니 다.사용자 정의 View 로 봉 인 했 습 니 다.다음 과 같 습 니 다.
PathTextView.Java
/**
* View, , 。
*/
public class PathTextView extends LinearLayout {
private TextView mTextView;
private HorizontalScrollView hsView;
private OnItemClickListener mListener;
// id
private LinkedList<PathItem> pathItemList;
//
private static final int TEXT_COLOR = Color.parseColor("#48a0c7");
//
private static final String DIV_STR = " - ";
public PathTextView(Context context) {
super(context);
}
public PathTextView(Context context, AttributeSet attrs) {
super(context, attrs);
View root = LayoutInflater.from(context).inflate(R.layout.simple_tv, this, true);
hsView = (HorizontalScrollView) root.findViewById(R.id.path_hs);
mTextView = (TextView) root.findViewById(R.id.path_tv);
mTextView.setMovementMethod(LinkMovementMethod.getInstance());
mTextView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
return true;
}
});
pathItemList = new LinkedList<>();
}
/**
* 。
*/
public void initRoot(String text) {
mTextView.append(createSpannableString(-1, text));
pathItemList.addLast(new PathItem(-1, text));
}
/**
* 。
*/
public void append(long id, String text) {
mTextView.append(DIV_STR);
mTextView.append(createSpannableString(id, text));
pathItemList.addLast(new PathItem(id, text));
//HorizontalScrollView
hsView.postDelayed(new Runnable() {
@Override
public void run() {
hsView.fullScroll(HorizontalScrollView.FOCUS_RIGHT);
}
}, 100);
}
/**
* , “ ” 。
*/
public void backParent() {
int lastItemLength = pathItemList.removeLast().text.length();
CharSequence oldCs = mTextView.getText();
mTextView.setText(oldCs.subSequence(0, oldCs.length() - lastItemLength - DIV_STR.length()));
}
private SpannableString createSpannableString(long id, String text) {
SpannableString spStr = new SpannableString(text);
ClickableSpan clickSpan = new MyClickableSpan(id);
spStr.setSpan(clickSpan, 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
spStr.setSpan(new ForegroundColorSpan(TEXT_COLOR), 0, text.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
return spStr;
}
private class MyClickableSpan extends ClickableSpan {
private long id;
MyClickableSpan(long id) {
super();
this.id = id;
}
@Override
public void onClick(View widget) {
//
int backCount = 0;
while (pathItemList.getLast().id != id) {
backParent();
backCount++;
}
//
if (mListener != null && backCount > 0) {
mListener.onClick(id, backCount);
}
}
}
private class PathItem {
private long id;
private String text;
private PathItem(long id, String text) {
this.id = id;
this.text = text;
}
}
public interface OnItemClickListener {
/**
* @param currentId id.
* @param backCount .
*/
void onClick(long currentId, int backCount);
}
/**
* 。
*/
public void setOnItemClickListener(OnItemClickListener listener) {
this.mListener = listener;
}
}
레이아웃 파일 은 TextView 입 니 다.simple_tv.xml
<?xml version="1.0" encoding="utf-8"?>
<HorizontalScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/path_hs"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/light_gray2"
android:scrollbars="none">
<TextView
android:id="@+id/path_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@color/light_gray2"
android:paddingBottom="12dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="12dp"
android:textSize="15sp" />
</HorizontalScrollView>
사용법 도 간단 하 다.1.초기 화 할 때 initRoot(String text)방법 을 사용 하여 루트 이름 을 입력 합 니 다.
2.목록 항목 을 클릭 하여 다음 단계 에 들 어 갈 때 append(long id,String text)방법 을 사용 하여 현재 항목 의 id(유일한 구분 에 사용)와 이름 을 전달 합 니 다.
3.이전 단계 로 돌아 갈 때 backParent()방법 을 호출 합 니 다.
4.중간 경 로 를 누 르 면 OnitemClickListener.onClick(long currentId,int backCount)방법 이 바 뀌 고 클릭 항목 의 id 와 되 돌아 오 는 등급 수 를 되 돌려 줍 니 다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.