사용자 정의 컨트롤 만들기 복합 컨트롤

13248 단어 복합 공간
  • 복합 컨트롤러를 만들면 재사용 기능을 가진 컨트롤러 집합을 잘 만들 수 있다. 이런 방식은 보통
  • 적절한 View Group을 상속합니다.지정한 기능의 컨트롤을 추가하여 새로운 복합으로 조합하기
  • 컨트롤.이런 방식으로 만든 컨트롤러는 일반적으로 설정할 수 있는 속성을 지정합니다.

  • 1. 사용자 정의 속성을 만드는 방법
  • Android에서 사용자 정의 속성을 추가하려면attrs에 의존해야 합니다.xml 파일.(res 자원문에 구축
  • 부품 아래의values 디렉터리에서) 이 파일을 통해 해당하는 속성을 정의하면 됩니다.
  • 하나의 topBar를 예로 들면 하나의 APP에 모든 이벤트에 공통된 topBar가 있는데 우리는
  • 이것을 추출하여 하나의 공통된 UI 구성 요소를 형성한다. 여기에 문자, 크기, 배경 그림을 사용자 정의한다
  • 색상 속성.
  • <?xml version="1.0" encoding="utf-8"?>
    <resources>
    
        <declare-styleable name="TopBar">
            <!--     -->
            <attr name="myTitle" format="string" />
            <!-- dimension dp-->
            <attr name="titleTextSize" format="dimension" />
            <attr name="titleColor" format="color" />
            <attr name="titleGravity" format="integer" />
            <!--    -->
            <attr name="leftText" format="string" />
            <attr name="leftBackGround" format="color|reference" />
            <attr name="leftTextColor" format="color" />
            <!--   -->
            <attr name="rightText" format="string" />
            <attr name="rightBackground" format="color|reference" />
            <attr name="rightTextColor" format="color" />
    
        </declare-styleable>
    
    </resources>
  • 은 사용자 정의 속성을 사용한다고 설명합니다.그리고name 속성을 통해 인용된 것을 확인합니다
  • 명칭.
  • 를 통해 특정 사용자 정의 속성을 선언합니다.4.format 속성을 통해 속성의 유형을 지정합니다.|를 사용하여 서로 다른 속성을 구분할 수 있습니다. 현재 알려진 속성은 다음과 같습니다.reference 자원 형식입니다. 보통 @로 시작합니다. 예를 들어 @+id/xxxx, @id/xxxxstring 문자열 형식입니다. 텍스트 정보 dimension 부동 소수점 형식입니다. 보통 사이즈 도량입니다. 단위는 px, dp, sp, dip 등color 색상 형식이고, 보통 색상 16진 코드입니다.ARGB 지원.boolean 부어 유형,true와false enum 매거 유형, 보통 이 속성을 대표하여 몇 가지 값을 제공하여 선택할 수 있으며, 이 몇 가지 중 하나의flag만 선택할 수 있으며,enum은 기본적으로 차이가 없다.integer 정수 유형, XML에서 사용자 정의 속성을 가져오는 정수
  • TypedArray typedArray  = 
        context.obtainStyledAttributes(attrs, R.styleable.TopBar);
  • R.styleable .TopBar가 지정한 것은 .
  • 의name 이름입니다.다음은 typearray를 통과할 수 있습니다.getString(),getColor(),get…
  • 정의된 속성 값을 가져옵니다.코드는 아래와 같다
  • /** *         ,   ViewGroup  * */
        private void initTopbar(Context context,AttributeSet attrs){
    
            //  xml      
            TypedArray typedArray =context.obtainStyledAttributes(attrs, R.styleable.TopBar);
    
            titleName = typedArray.getString(R.styleable.TopBar_myTitle);
            titleTextSize = typedArray.getDimension(R.styleable.TopBar_titleTextSize,10);
            titleColor = typedArray.getColor(R.styleable.TopBar_titleColor,0);
            titleGravity = typedArray.getInteger(R.styleable.TopBar_titleGravity,10);
    
             leftText = typedArray.getString(R.styleable.TopBar_leftText);
             leftBackGround = typedArray.getDrawable(R.styleable.TopBar_leftBackGround);
            leftTextColor = typedArray.getColor(R.styleable.TopBar_leftTextColor,0);
    
            rightText = typedArray.getString(R.styleable.TopBar_rightText);
            rightBackGround = typedArray.getDrawable(R.styleable.TopBar_rightBackground);
            rightTextColor = typedArray.getInt(R.styleable.TopBar_rightTextColor,0);
            typedArray.recycle();
    
            Button leftBtn = new Button(context);
            Button rightBtn = new Button(context);
            TextView titleText = new TextView(context);
    
            leftBtn.setText(leftText);
            leftBtn.setBackground(leftBackGround);
            leftBtn.setTextColor(leftTextColor);
    
            LayoutParams leftParams =
                    new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.MATCH_PARENT);
            leftParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT,TRUE);
    
            addView(leftBtn,leftParams);
    
            rightBtn.setText(rightText);
            rightBtn.setBackground(rightBackGround);
            rightBtn.setTextColor(rightTextColor);
    
            LayoutParams rightParams =
                    new LayoutParams( LayoutParams.WRAP_CONTENT,  LayoutParams.MATCH_PARENT);
    
            rightParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT,TRUE);
            addView(rightBtn,rightParams);
    
            titleText.setText(titleName);
            titleText.setTextSize(titleTextSize);
            titleText.setTextColor(titleColor);
            titleText.setGravity(titleGravity);
    
            LayoutParams titleParams = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT);
            titleParams.addRule(RelativeLayout.CENTER_IN_PARENT,TRUE);
    
            addView(titleText,titleParams);
    
            addListener(leftBtn,rightBtn);
    
        }
    
        /** *                   * @param leftBtn   button * @param rightBtn    button * */
    
        private void addListener(Button leftBtn,Button rightBtn) {
    
    
            leftBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.leftClick();
                }
            });
    
            rightBtn.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(View v) {
                    mListener.rightClick();
                }
            });
    
    
        }
    
        /** *                   *                   。 * */
    
        public void setOntopbarClickListener(TopbarClickListener mListener){
    
            this.mListener = mListener;
    
        }
    
    
       public interface TopbarClickListener{
    
            void leftClick();
            void rightClick();
    
        }
    
  • 이러한 TopBar의 템플릿은 이미 제정되었다.커넥터 리콜이 제공되며
  • 좌우 단추의 클릭 이벤트는 호출자에게 맡깁니다.(인터페이스 리듬의 사상)
  • 호출자, 사용자 정의 ViewGroup을 인용하고 속성을 설정합니다
  • <?xml version="1.0" encoding="utf-8"?>
    <com.xiaoxu.administrator.myserviceapp.view.MyTopbar
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:topbar ="http://schemas.android.com/apk/res-auto"
    
        android:id="@+id/topBar"
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        topbar:myTitle ="     "
        topbar:titleTextSize="10dp"
        topbar:titleColor ="#123412"
        topbar:titleGravity ="20"
    
        topbar:leftText="  "
        topbar:leftBackGround="@drawable/left_pic"
        topbar:leftTextColor ="#FFFFFF"
    
        topbar:rightText="   "
        topbar:rightBackground="@drawable/right_pic"
        topbar:rightTextColor="#FFFFFF">
    
    </com.xiaoxu.administrator.myserviceapp.view.MyTopbar>

    - 그런 다음 활동의 레이아웃에서 다음을 참조할 수 있습니다. - 설정된 속성을 현재 활동에 설정합니다.
    <include layout="@layout/topbar_layout"/>
  • 제목의 그룹의 실례를 찾아 인터페이스의 대상을 전송하여 구체적인 논리를 실현한다.
  •   MyTopbar myTopbar = (MyTopbar) findViewById(R.id.topBar);
    
            myTopbar.setOntopbarClickListener(new MyTopbar.TopbarClickListener() {
                @Override
                public void leftClick() {
                //     
                    Toast.makeText(SecondActivity.this," LeftClick ",Toast.LENGTH_SHORT).show();
                }
    
                @Override
                public void rightClick() {
                //     
                    Toast.makeText(SecondActivity.this," RightClick ",Toast.LENGTH_SHORT).show();
                }
            });

    효과는 그림과 같아서 보기에는 매우 low적이다. 좋은 그림이 없어서 마음대로 두 장을 만들었는데 그림이 있으면 다시 고쳐도 소용없다.하하

    좋은 웹페이지 즐겨찾기