在Android項(xiàng)目中使用view實(shí)現(xiàn)一個(gè)點(diǎn)擊事件

這篇文章將為大家詳細(xì)講解有關(guān)在Android項(xiàng)目中使用view實(shí)現(xiàn)一個(gè)點(diǎn)擊事件,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

10多年的蘭溪網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。網(wǎng)絡(luò)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整蘭溪建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“蘭溪網(wǎng)站設(shè)計(jì)”,“蘭溪網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

Android 自定義view模板并實(shí)現(xiàn)點(diǎn)擊事件的回調(diào)

先看效果圖:

在Android項(xiàng)目中使用view實(shí)現(xiàn)一個(gè)點(diǎn)擊事件

步驟如下:

1.在res/values/目錄下新建一個(gè)atts.xml文件

內(nèi)容如下:

<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文件完成后,就是寫一個(gè)TopBar.java文件來進(jìn)行布局:

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添加回調(diào)點(diǎn)擊事件,好處是不需要每次都修改TopBar中的點(diǎn)擊事件,只需修改從外面?zhèn)鬟M(jìn)來的Listener的點(diǎn)擊事件
   * @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);//設(shè)置整個(gè)背景色

    /**
     * 將3個(gè)控件進(jìn)行布局
     */
    //左邊的按鈕位于父布局的左邊,通過addRule(RelativeLayout.ALIGN_PARENT_LEFT);來實(shí)現(xiàn)
    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是通過繼承自RelativeLayout來實(shí)現(xiàn)的。

注意:由于我們的目的是自定義模板View,所以我們最好不要在TopBar.java中做如下操作:

leftBtn.setOnClickListener(new OnClickListener() {

      @Override
      public void onClick(View v) {
        // TODO Auto-generated method stub
        //listener.leftBtnClick();//回調(diào)實(shí)現(xiàn)
        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();//回調(diào)實(shí)現(xiàn)
        Toast.makeText(context, "RIGHT BUTTOM CLICK", Toast.LENGTH_SHORT).show();
      }
    });

如果這樣做對(duì)于不同的點(diǎn)擊事件都需要修改TopBar.java文件中的點(diǎn)擊事件,失去了模板的意義。

主布局文件代碼如下:

<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="網(wǎng)易新聞"
    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/ 后面是包名。作用相當(dāng)于導(dǎo)入包名

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);

    /**
     * 利用回調(diào)實(shí)現(xiàn)TopBar的點(diǎn)擊事件
     */
    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中顯示的標(biāo)題
    mTopBar.setTvTitle("鳳凰網(wǎng)");

  }
}

關(guān)于在Android項(xiàng)目中使用view實(shí)現(xiàn)一個(gè)點(diǎn)擊事件就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。

標(biāo)題名稱:在Android項(xiàng)目中使用view實(shí)現(xiàn)一個(gè)點(diǎn)擊事件
文章來源:http://m.kartarina.com/article26/pipjjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷外貿(mào)網(wǎng)站建設(shè)建站公司關(guān)鍵詞優(yōu)化網(wǎng)站維護(hù)搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
主站蜘蛛池模板: 亚洲av永久中文无码精品综合| 免费无码又爽又刺激毛片| 久久亚洲AV成人出白浆无码国产| 亚洲av永久无码精品国产精品| 97碰碰碰人妻视频无码| 国产精品午夜无码AV天美传媒| a级毛片免费全部播放无码| 亚洲精品无码乱码成人 | 无码A级毛片日韩精品| 日韩a级无码免费视频| 亚洲天然素人无码专区| 亚洲精品无码av人在线观看| 免费无码又爽又刺激毛片| 无码av免费一区二区三区| 亚洲中文字幕无码爆乳av中文| 无码粉嫩小泬无套在线观看| 亚洲色偷拍另类无码专区| yy111111少妇影院无码| 蜜臀AV无码一区二区三区| 熟妇人妻无码中文字幕| 国精品无码一区二区三区在线蜜臀| 人妻aⅴ中文字幕无码| 免费看成人AA片无码视频羞羞网| 亚洲精品无码久久久久sm| 国产在线精品无码二区二区 | 中文字幕无码不卡免费视频| 亚洲精品中文字幕无码蜜桃| 国产麻豆天美果冻无码视频| (无码视频)在线观看| 亚洲精品无码成人片久久不卡| 亚洲的天堂av无码| 日韩欧精品无码视频无删节 | 免费无码看av的网站| 无码人妻丰满熟妇区96 | 性色av极品无码专区亚洲| 亚州AV综合色区无码一区| 亚洲av无码一区二区三区天堂| 西西大胆无码视频免费| 永久免费无码网站在线观看| 亚洲一区无码精品色| 暴力强奷在线播放无码|