Android 프로 그래 밍 이 실 현 된 간단 한 경로 내 비게 이 션 바 기능 예시

5906 단어 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 와 되 돌아 오 는 등급 수 를 되 돌려 줍 니 다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기