亚洲精品亚洲人成在线观看麻豆,在线欧美视频一区,亚洲国产精品一区二区动图,色综合久久丁香婷婷

              當(dāng)前位置:首頁 > IT技術(shù) > 移動平臺 > 正文

              Android自定義控件(二)---實戰(zhàn)篇
              2021-09-16 11:53:56

              續(xù)上,我們已經(jīng)掌握了自定義控件的基礎(chǔ)知識(不清楚的自己去查看Android自定義控件(一)---基礎(chǔ)篇),下面,我們來簡單的寫一個自定義 mTextView 控件(提醒一下:控件名字和屬性名字最好不要和系統(tǒng)一樣,容易報沖突錯誤),廢話不多說,上碼!?。?/p>

              第一步:在 res 文件 下的 values 文件夾下新建一個名稱為 attrs 的 attrs.xml 文件(這里可以改成別的文件名,但我覺得沒必要,別閑的蛋疼)

              Android自定義控件(二)---實戰(zhàn)篇_安卓

              ?第二步:在 attrs.xml 文件夾里自定義一些自己規(guī)劃好的屬性,這里我們就簡單寫幾個

              <?xml version="1.0" encoding="utf-8"?>
              <resources>
                  <!-- name 最好是自定義view的名字 例如:mTextView -->
                  <declare-styleable name="mTextView">
                      <!-- name 屬性名稱 不要和系統(tǒng)沖突
                      format 格式  string 字符串
                                   color 顏色
                                   dimension 寬高 字體大小
                                   integer 數(shù)字
                                   reference 資源(drawable)
                      -->
                      <attr name="mTextSize" format="dimension"/>
                      <attr name="mTextColor" format="color"/>
                      <attr name="mText" format="string"/>
                  </declare-styleable>
              </resources>

              ?Android自定義控件(二)---實戰(zhàn)篇_android studio_02

              第三步:在布局文件中應(yīng)用

              <?xml version="1.0" encoding="utf-8"?>
              <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  xmlns:app="http://schemas.android.com/apk/res-auto"
                  xmlns:tools="http://schemas.android.com/tools"
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:orientation="vertical"
                  tools:context=".MainActivity">
              
                  <com.example.mytextview.mTextView
                      android:layout_width="50dp"
                      android:layout_height="50dp"
                      android:background="@color/colorAccent"
                      app:mText="關(guān)注我,不迷路,哈哈哈,打了一波廣告"
                      app:mTextSize="16dp"
                      app:mTextColor="#ff0000"/>
              
              </LinearLayout>

              Android自定義控件(二)---實戰(zhàn)篇_移動開發(fā)_03

              第四步:新建一個 自定義控件的類,如 mTextView,在這個類里獲取自定義屬性值

              package com.example.mytextview;
              
              //import javax.swing.text.View;
              import android.content.Context;
              import android.content.res.TypedArray;
              import android.graphics.Canvas;
              import android.graphics.Color;
              import android.util.AttributeSet;
              import android.view.View;
              
              import androidx.annotation.Nullable;
              
              public class mTextView extends View {
                  //1、設(shè)置自定義屬性變量
                  private int mTextSize = 16;
                  private int mTextColor = Color.RED;
                  private String mText; 
                  
                  public mTextView(Context context) {
                      this(context,null);
                  }
              
                  public mTextView(Context context, @Nullable AttributeSet attrs) {
                      this(context, attrs,0);
                  }
              
                  public mTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
                      super(context, attrs, defStyleAttr);
              
                      //2、獲取裝有自定義屬性值的數(shù)值
                      TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.mTextView);
                      //3、精確獲取自定義屬性值
                      mTextSize = typedArray.getDimensionPixelSize(R.styleable.mTextView_mTextSize,mTextSize);//源碼用的這個方法,參照 TextView
                      mTextColor = typedArray.getColor(R.styleable.mTextView_mTextColor,mTextColor);
                      mText = typedArray.getString(R.styleable.mTextView_mText);
                      //4、回收 typedArray
                      typedArray.recycle();
                  }
              
                  //5、測量
                  @Override
                  protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
                      super.onMeasure(widthMeasureSpec, heightMeasureSpec);
                  }
              
                  //6、繪制
                  @Override
                  protected void onDraw(Canvas canvas) {
                      super.onDraw(canvas);
                  }
              }
              

              寫到這里,已經(jīng)成功了一大半,但是,如果你將項目運行起來,會發(fā)現(xiàn)什么也沒有,因為你還沒有 測量(onMeasure)和繪制(onDraw),后續(xù)我們會詳細(xì)闡述這兩個方法。

              本文摘自 :https://blog.51cto.com/u

              開通會員,享受整站包年服務(wù)立即開通 >