Android 는 view 템 플 릿 을 사용자 정의 하고 클릭 이벤트 의 리 셋 을 실현 합 니 다.

Android 는 view 템 플 릿 을 사용자 정의 하고 클릭 이벤트 의 리 셋 을 실현 합 니 다.
주요 목적 은 오래된 QQ 의 인 터 페 이 스 를 모방 하여 템 플 릿 을 만 드 는 것 이다.그리고 클릭 이벤트 의 리 셋 을 실현 합 니 다.효과 그림 먼저 보기:
BACK 和MORE是两个按钮,
절 차 는 다음 과 같다.
1.res/values/디 렉 터 리 에 atts.xml 파일 을 새로 만 듭 니 다.
내용 은 다음 과 같다.

<resources>
  <declare-styleable name="topbar">
    <attr name="title" format="string"/>
    <attr name="titleBacgroud" format="reference|color"/>
    <attr name="titleSize" format="dimension"></attr>

    <attr name="leftBtnTitle" format="string"></attr>
    <attr name="leftBtnColor" format="color"></attr>
    <attr name="leftBtnSize" format="dimension"></attr>

    <attr name="rightBtnTitle" format="string"></attr>
    <attr name="rightBtnColor" format="color"></attr>
    <attr name="rightBtnSize" format="dimension"></attr>

  </declare-styleable>
attr.xml 파일 이 완성 되면 TopBar.java 파일 을 써 서 레이아웃 을 합 니 다.

public class TopBar extends RelativeLayout{

  private Button leftBtn, rightBtn;
  private TextView tvTitle;

  private String title;
  private float titleSize ;
  private Drawable titleBackground;

  private String leftBtnTitle;
  private int leftBtnColor;
  private float leftBtnSize;

  private String rightBtnTitle;
  private int rightBtnColor;
  private float rightBtnSize;

  private LayoutParams leftBtnParams ,righBtnParams,titleParams;

  /**
   *  TopBar        ,           TopBar      ,           Listener     
   * @param context
   * @param attrs
   */

  public interface topbarClickListener{
    void leftBtnClick();
    void rightBtnClick();
  }

  private topbarClickListener listener;

  public void setTopbarClickListener(topbarClickListener ls){
    this.listener = ls;
  }

  public TopBar(Context context, AttributeSet attrs) {
    super(context, attrs);
    // TODO Auto-generated constructor stub


    TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.topbar);

    title = ta.getString(R.styleable.topbar_title);
    titleSize = ta.getDimension(R.styleable.topbar_titleSize, 0);
    titleBackground = ta.getDrawable(R.styleable.topbar_titleBacgroud);

    leftBtnTitle = ta.getString(R.styleable.topbar_leftBtnTitle);
    leftBtnColor = ta.getColor(R.styleable.topbar_leftBtnColor, 0);
    leftBtnSize = ta.getDimension(R.styleable.topbar_leftBtnSize, 0);

    rightBtnTitle = ta.getString(R.styleable.topbar_rightBtnTitle);
    rightBtnColor = ta.getColor(R.styleable.topbar_rightBtnColor, 0);
    rightBtnSize = ta.getDimension(R.styleable.topbar_rightBtnSize, 0);

    ta.recycle();//    

    tvTitle = new TextView(context);
    leftBtn = new Button(context);
    rightBtn = new Button(context);

    tvTitle.setText(title);
    tvTitle.setTextSize(titleSize);
    tvTitle.setBackground(titleBackground);

    leftBtn.setText(leftBtnTitle);
    leftBtn.setTextColor(leftBtnColor);
    leftBtn.setTextSize(leftBtnSize);

    rightBtn.setText(rightBtnTitle);
    rightBtn.setTextColor(rightBtnColor);
    rightBtn.setTextSize(rightBtnSize);

    setBackgroundColor(Color.DKGRAY);//       

    /**
     *  3       
     */
    //             ,  addRule(RelativeLayout.ALIGN_PARENT_LEFT);   
    leftBtnParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT);
    leftBtnParams.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
    leftBtnParams.setMargins(0, 18, 0, 0);
    addView(leftBtn, leftBtnParams);

    righBtnParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.WRAP_CONTENT);
    righBtnParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
    righBtnParams.setMargins(0, 18, 0, 0);
    addView(rightBtn, righBtnParams);
    //   TextView        ,addRule(RelativeLayout.CENTER_IN_PARENT);
    titleParams = new LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,
        RelativeLayout.LayoutParams.MATCH_PARENT);
    titleParams.addRule(RelativeLayout.CENTER_IN_PARENT);

    tvTitle.setGravity(Gravity.CENTER);

    addView(tvTitle, titleParams);


    leftBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        listener.leftBtnClick();
      }
    });


    rightBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        listener.rightBtnClick();
      }
    });

  }

  public void setTvTitle(String value){
    tvTitle.setText(value);
  }

}
TopBar 는 Relative Layout 의 계승 을 통 해 이 루어 졌 다.
메모:템 플 릿 View 를 사용자 정의 하 는 것 이 목적 이기 때문에 TopBar.자바 에서 다음 과 같은 작업 을 하지 않 는 것 이 좋 습 니 다.

leftBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        //listener.leftBtnClick();//    
        Toast.makeText(context, "LEFT BUTTOM CLICK", Toast.LENGTH_SHORT).show();
      }
    });


    rightBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        //listener.rightBtnClick();//    
        Toast.makeText(context, "RIGHT BUTTOM CLICK", Toast.LENGTH_SHORT).show();
      }
    });
이렇게 하면 서로 다른 클릭 이벤트 에 대해 TopBar.java 파일 의 클릭 이 벤트 를 수정 해 야 하기 때문에 템 플 릿 의 의 미 를 잃 게 됩 니 다.
주 레이아웃 파일 코드 는 다음 과 같 습 니 다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:custom="http://schemas.android.com/apk/res/com.example.viewpagerdemo"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" >

  <com.example.viewpagerdemo.view.TopBar 
    android:id="@+id/topbar"
    android:layout_width="match_parent"
    android:layout_height="100dp"
    custom:title="    "
    custom:titleBacgroud="#ff2255"
    custom:titleSize="30sp"
    custom:leftBtnTitle="BACK"
    custom:leftBtnColor="#ff4400"
    custom:leftBtnSize="24sp"
    custom:rightBtnTitle="MORE"
    custom:rightBtnColor="#ff4400"
    custom:rightBtnSize="24sp"
    ></com.example.viewpagerdemo.view.TopBar>

</LinearLayout>
위의 xmlns:custom="http://schemas.android.com/apk/res/com.example.viewpagerdemo"추가 해 야 합 니 다.res/뒤 에는 가방 이름 입 니 다."패키지 이름 가 져 오기
MainActivity.java 파일 은 다음 과 같 습 니 다.

public class TopBarActivity extends Activity{

  private TopBar mTopBar;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);

    setContentView(R.layout.topbar_layout);

    mTopBar = (TopBar) findViewById(R.id.topbar);

    /**
     *       TopBar     
     */
    mTopBar.setTopbarClickListener(new topbarClickListener() {

      @Override
      public void rightBtnClick() {
        // TODO Auto-generated method stub
        Toast.makeText(TopBarActivity.this, "RIGHT BUTTOM CLICK", Toast.LENGTH_SHORT).show();
      }

      @Override
      public void leftBtnClick() {
        // TODO Auto-generated method stub
        Toast.makeText(TopBarActivity.this, "LEFT BUTTOM CLICK", Toast.LENGTH_SHORT).show();
      }
    });

    //  TopBar      
    mTopBar.setTvTitle("   ");

  }
}
이렇게 하면 MainActivity 에서 리 셋 을 통 해 클릭 이 벤트 를 실현 할 수 있다.
읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기