亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統(tǒng) > Android > 正文

android 自定義控件 自定義屬性詳細介紹

2020-04-11 12:41:09
字體:
供稿:網(wǎng)友
自定義控件在android中無處不見,自定義控件給了我們很大的方便。比如說,一個視圖為imageview ,imagebutton ,textview 等諸多控件的組合,用的地方有很多,我們不可能每次都來寫3個的組合,既浪費時間,效率又低。在這種情況下,我們就可以自定義一個view來替換他們,不僅提升了效率并且在xml中運用也是相當?shù)拿烙^。
一、控件自定義屬性介紹
以下示例中代碼均在values/attrs.xml 中定義,屬性均可隨意命名。
1. reference:參考某一資源ID。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "background" format = "reference" />
<attr name = "src" format = "reference" />
</declare-styleable>

2. color:顏色值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "textColor" format = "color" />
</declare-styleable>

3. boolean:布爾值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "focusable" format = "boolean" />
</declare-styleable>

4. dimension:尺寸值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "layout_width" format = "dimension" />
</declare-styleable>

5. float:浮點值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "fromAlpha" format = "float" />
<attr name = "toAlpha" format = "float" />
</declare-styleable>

6. integer:整型值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "frameDuration" format="integer" />
<attr name = "framesCount" format="integer" />
</declare-styleable>

7. string:字符串。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "text" format = "string" />
</declare-styleable>

8. fraction:百分數(shù)。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name="名稱">
<attr name = "pivotX" format = "fraction" />
<attr name = "pivotY" format = "fraction" />
</declare-styleable>

9. enum:枚舉值。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name="名稱">
<attr name="orientation">
<enum name="horizontal" value="0" />
<enum name="vertical" value="1" />
</attr>
</declare-styleable>

10. flag:位或運算。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name="名稱">
<attr name="windowSoftInputMode">
<flag name = "stateUnspecified" value = "0" />
<flag name = "stateUnchanged" value = "1" />
<flag name = "stateHidden" value = "2" />
<flag name = "stateAlwaysHidden" value = "3" />
</attr>
</declare-styleable>

11.多類型。
示例:
[java]
復制代碼 代碼如下:

<declare-styleable name = "名稱">
<attr name = "background" format = "reference|color" />
</declare-styleable>

-------------------------------------------------------------------------------------------
二、屬性的使用以及自定義控件的實現(xiàn)
1、構思控件的組成元素,思考所需自定義的屬性。
比如:我要做一個 <帶陰影的按鈕,按鈕正下方有文字說明>(類似9宮格按鈕)
新建values/attrs.xml
[java]
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="custom_view">
<attr name="custom_id" format="integer" />
<attr name="src" format="reference" />
<attr name="background" format="reference" />
<attr name="text" format="string" />
<attr name="textColor" format="color" />
<attr name="textSize" format="dimension" />
</declare-styleable>
</resources>

以上,所定義為custom_view,custom_id為按鈕id,src為按鈕,background為陰影背景,text為按鈕說明,textColor為字體顏色,textSize為字體大小。
2、怎么自定義控件呢,怎么使用這些屬性呢?話不多說請看代碼,CustomView :
復制代碼 代碼如下:

package com.nanlus.custom;
import com.nanlus.custom.R;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.Gravity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.FrameLayout;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
public class CustomView extends FrameLayout implements OnClickListener {
private CustomListener customListener = null;
private Drawable mSrc = null, mBackground = null;
private String mText = "";
private int mTextColor = 0;
private float mTextSize = 20;
private int mCustomId = 0;
private ImageView mBackgroundView = null;
private ImageButton mButtonView = null;
private TextView mTextView = null;
private LayoutParams mParams = null;
public CustomView(Context context) {
super(context);
}
public CustomView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs,
R.styleable.custom_view);
mSrc = a.getDrawable(R.styleable.custom_view_src);
mBackground = a.getDrawable(R.styleable.custom_view_background);
mText = a.getString(R.styleable.custom_view_text);
mTextColor = a.getColor(R.styleable.custom_view_textColor,
Color.WHITE);
mTextSize = a.getDimension(R.styleable.custom_view_textSize, 20);
mCustomId = a.getInt(R.styleable.custom_view_custom_id, 0);
mTextView = new TextView(context);
mTextView.setTextSize(mTextSize);
mTextView.setTextColor(mTextColor);
mTextView.setText(mText);
mTextView.setGravity(Gravity.CENTER);
mTextView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mButtonView = new ImageButton(context);
mButtonView.setImageDrawable(mSrc);
mButtonView.setBackgroundDrawable(null);
mButtonView.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
mButtonView.setOnClickListener(this);
mBackgroundView = new ImageView(context);
mBackgroundView.setImageDrawable(mBackground);
mBackgroundView.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
addView(mBackgroundView);
addView(mButtonView);
addView(mTextView);
this.setOnClickListener(this);
a.recycle();
}
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
mParams = (LayoutParams) mButtonView.getLayoutParams();
if (mParams != null) {
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
mButtonView.setLayoutParams(mParams);
}
mParams = (LayoutParams) mBackgroundView.getLayoutParams();
if (mParams != null) {
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.TOP;
mBackgroundView.setLayoutParams(mParams);
}
mParams = (LayoutParams) mTextView.getLayoutParams();
if (mParams != null) {
mParams.gravity = Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM;
mTextView.setLayoutParams(mParams);
}
}
public void setCustomListener(CustomListener l) {
customListener = l;
}
@Override
public void onClick(View v) {
if (customListener != null) {
customListener.onCuscomClick(v, mCustomId);
}
}
public interface CustomListener {
void onCuscomClick(View v, int custom_id);
}
}

代碼很簡單,就不多說,下面來看看我們的CustomView是怎么用的,請看:
3、自定義控件的使用
話不多說,請看代碼,main.xml:
[java]
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:nanlus="http://schemas.android.com/apk/res/com.nanlus.custom"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:orientation="horizontal" >
<com.nanlus.custom.CustomView
android:id="@+id/custom1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
nanlus:background="@drawable/background"
nanlus:custom_id="1"
nanlus:src="@drawable/style_button"
nanlus:text="按鈕1" >
</com.nanlus.custom.CustomView>
</LinearLayout>
</RelativeLayout>

在這里需要解釋一下,
xmlns:nanlus="http://schemas.android.com/apk/res/com.nanlus.custom"
nanlus為在xml中的前綴,com.nanlus.custom為包名
4、在Activity中,直接上代碼
[java]
復制代碼 代碼如下:

package com.nanlus.custom;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.nanlus.BaseActivity;
import com.nanlus.custom.R;
import com.nanlus.custom.CustomView.CustomListener;
public class CustomActivity extends BaseActivity implements CustomListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
((CustomView) this.findViewById(R.id.custom1)).setCustomListener(this);
}
@Override
public void onCuscomClick(View v, int custom_id) {
switch (custom_id) {
case 1:
Toast.makeText(this, "hello !!!", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
欧美日韩伦理在线免费| 国产精品亚洲一区二区三区妖精| 中文字幕第12页| 国产欧美一区二区三区在线| 免费在线黄色av| 久久久夜色精品亚洲| 精品国产乱码久久久久久108| 天堂аⅴ在线最新版在线| 国产一区二区三区日韩| 国产美女高潮在线| 久久青青草原亚洲av无码麻豆| 中文字幕人妻熟女在线| 亚洲精品videosex极品| 久久亚洲精品无码va白人极品| 国产伦精品一区二区三区免费迷| 亚洲精品国产免费| 日本视频在线观看| 欧美性久久久久| 中文官网资源新版中文第二页在线观看| 免费黄网站观看| 色天天综合久久久久综合片| 精品无码三级在线观看视频| 四虎影在永久在线观看| 国内精品伊人久久久| 中文字幕精品网| 一级全黄裸体免费视频| 波多野结衣作品集| 日韩欧美aⅴ综合网站发布| 久久久午夜精品福利内容| 欧美中文娱乐网| 蜜桃精品在线| 亚洲欧美日韩免费| 91精品国产高清久久久久久久久| 成人av动漫在线观看| 99精品欧美一区二区蜜桃免费| 色综合av综合无码综合网站| 日干夜干天天干| 国产精品7区| 99精品视频播放| 91porny九色| 亚洲aaa激情| 黄色片免费看| 在线看片一区| 在线精品国产亚洲| 欧美中文字幕在线| 成人软件网18免费视频| 成年女人毛片| 天天操天天干天天玩| 国产91精品看黄网站在线观看| 国产1区2区在线观看| 特级西西444www大胆免费看| 极品av少妇一区二区| 亚洲va欧美va天堂v国产综合| 亚洲午夜剧场| 狠狠色丁香婷婷综合久久片| 老司机福利在线观看| 天天射综合网视频| 国产脚交av在线一区二区| 欧美激情乱人伦一区| 久久精品aⅴ无码中文字字幕重口| 美女喷水网站| 人妻夜夜添夜夜无码av| 成人影院在线| 五月色婷婷综合| av首页在线观看| 国产98色在线| 免费观看又污又黄在线观看国产| 日韩三级不卡| 亚洲mv在线观看| 毛片大全在线观看| 超碰超碰超碰超碰超碰| 久久国产亚洲精品无码| 国产日韩在线一区二区三区| 给我免费观看片在线电影的| 男人天堂一区二区| 久久免费激情视频| 黄色动漫在线观看| 91国产福利在线| 潘金莲一级淫片aaaaaaa| 欧美福利视频一区二区| 日韩h在线观看| 国产精品日韩无码| 久久精品视频9| 91小仙女jk白丝袜呻吟| 一区二区三区视频在线免费观看| 欧美ab在线视频| 欧美丝袜美腿| 亚洲色图欧美自拍| 久久夜色精品亚洲| 蜜桃成人免费视频| 欧美性xxxxx极品视频| 欧美色成人综合| 国产美女视频一区| 欧美女同一区| 亚洲免费观看高清完整版在线| 欧美精品久久久久久| 在线免费观看视频网站| 国产精品久久一区二区三区| 可以在线观看av的网站| 久久久久久av无码免费看大片| 色婷婷**av毛片一区| 男人天堂999| 日韩制服一区| 色呦色呦色精品| 波多野结衣乳巨码无在线观看| 国产自产高清不卡| 男人天堂网在线观看| 日本精品一二三区| 色播久久人人爽人人爽人人片视av| 91精品国产综合久久蜜臀| 视频一区二区三区四区五区| 天天综合久久| 韩日精品一区| 精品理论电影在线| 国产二区三区四区| 亚洲男人第一网站| 欧美午夜片在线免费观看| 99在线精品视频在线观看| fc2成人免费视频| 免费日韩精品中文字幕视频在线| 日本一二区免费| 国产午夜精品免费一区二区三区| 精品在线免费观看视频| 中文字幕亚洲综合久久五月天色无吗''| 成人午夜国产福到在线| 在线观看av不卡| 是的av在线| 亚洲视频福利| 在线免费观看视频黄| 中文字幕在线免费视频| 波多野结衣之无限发射| 最新国产热播激情视频| 性色av一区二区怡红| 欧洲金发美女大战黑人| av高清在线免费观看| 穿情趣内衣被c到高潮视频| 成年人视频在线免费看| 国产在线观看一区二区| 一区二区三区欧美在线| www.欧美com| 宅男噜噜噜66国产精品免费| 久久精品久久久久久国产 免费| 毛片免费看不卡网站| 翔田千里88av中文字幕| 人妻少妇精品无码专区二区| 久草视频国产在线| 国产精品亲子伦av一区二区三区| 免费看污污视频| 国产美女福利在线观看| 97在线视频免费观看| 亚洲狼人在线| 99在线国产| 国产二区视频在线| 欧美高清dvd| 亚洲精品一区二区三区在线| 久久久人成影片免费观看| 精品黑人一区二区三区观看时间| www黄com| 精品国产91久久久| 国产亚洲精久久久久久无码77777| 久久这里只有精品视频网| 国产天堂在线观看| 久久精品国产sm调教网站演员| 在线免费看视频| 99国产精品一区二区三区| 国产一区二区精品久久99| 水野朝阳av一区二区三区| 日本大胆人体视频| 国产亚洲精品久久久久动| 欧美日韩视频一区二区三区| 精品亚洲a∨一区二区三区18| 激情av综合网| 视频国产一区二区| 天天综合一区| 大杳蕉精品视频在线观看| 久久综合网hezyo| www.黄色小说.com| 一区二区三区产品免费精品久久75| 日韩美女在线观看| 国产清纯白嫩初高中在线观看性色| 欧美国产精品中文字幕| 国产丶欧美丶日本不卡视频| 一二三四视频在线社区中文字幕2| 国产一级淫片久久久片a级| 在线国产欧美| 国产有色视频色综合| 欧洲一区在线| 国产一区二区三区中文字幕| 99国产欧美久久久精品| 同性gay免费| 日韩成人在线观看| 中文字幕国产免费| 亚洲乱码一区av黑人高潮| 久久伊人资源站| 国产精品久久久久久久久久久久久久| 欧美剧情电影在线观看完整版免费励志电影| 国产喷白浆一区二区三区| 最近最好的中文字幕2019免费| 免费av中文字幕| 秘密影院久久综合亚洲综合| 成熟妇人a片免费看网站| 99精品人妻无码专区在线视频区| 在线黄色国产视频| 国精产品999国精产品官网| 久久亚洲国产中v天仙www| 国产一区二区三区在线免费| 色婷婷av一区| 亚洲熟女乱综合一区二区三区| 精品一区二区三区蜜桃| 五十路亲子中出中文字幕| 日本japanese极品少妇| 青青草原成人在线视频| 五月婷婷欧美视频| 亚洲国产成人va在线观看天堂| 欧美电影免费播放| 亚洲综合清纯丝袜自拍| 国产精品66| 四虎国产精品永久| 亚洲人人夜夜澡人人爽| 日日摸夜夜添夜夜添国产精品| eeuss影院在线观看第一页| 色呦呦一区二区| 综合色婷婷一区二区亚洲欧美国产| 在线国产一级| 久草中文在线观看| 国产精品免费免费| 日韩av女优在线观看| 欧美日韩成人激情| 夜夜爽久久精品91| 成人免费一区二区三区在线观看| 毛毛毛毛毛毛毛片123| 亚洲天堂网站在线| 少妇视频一区二区| 精品午夜视频| 在线观看免费视频黄| 亚洲国产成人精品一区二区三区| 麻豆av电影在线观看| 成人一区二区在线观看| 高清欧美日韩| 亚洲国产电影| 中文字幕在线免费不卡| www.黄在线观看| 精品一区二区三区欧美| 韩日精品视频一区| 免费在线看黄色| 成人av免费电影| 久久99久久久久久久久久久| 久久这里只有| 精品成人国产| 欧美激情资源网| 午夜在线观看免费一区| 免费亚洲婷婷| 黄在线免费看| 国产99久久精品一区二区永久免费| 国产精品一区二区三区四区五区| 国产精品18久久久久久vr| 精品69视频一区二区三区Q| 欧美区一区二区三区| 久久久久久91香蕉国产| 国产成人无码av| 成人精品动漫一区二区三区| 亚洲激情一二三区| 亚洲国产成人在线观看| 少妇激情一区二区三区视频| 日韩精品福利网站| 国产精品亚洲电影久久成人影院| 性一交一黄一片| 四虎成人在线观看| 高清视频欧美一级| 一区二区冒白浆视频| 尤物免费看在线视频| 中国 免费 av| 日本午夜精品久久久| 日韩暖暖在线视频| 波多野吉衣av| 欧美精品一区二区成人| 亚洲熟妇一区二区三区| 国产suv一区二区三区88区| 国产精品久久久久久久妇| 中文字幕在线看视频国产欧美在线看完整| 被男同事摸的水好多| 精品少妇一区二区三区免费观看| 欧美一二三视频| 亚洲精品久久7777777| 久久99性xxx老妇胖精品| 强制高潮抽搐sm调教高h| 91大学生片黄在线观看| 久久精品二区亚洲w码| 偷拍自拍亚洲| 日本黄色三级网站| 亚洲天堂免费在线观看视频| 国产69精品久久久久久久| 成人春色在线观看免费网站| 中文字幕制服丝袜一区二区三区| 日本在线人成| 欧美综合视频在线观看| 亚洲av无码国产精品久久| 色综合久久久久综合一本到桃花网| www.成人精品免费网站青椒| 亚洲va久久久噜噜噜久久天堂| 日韩欧美高清dvd碟片| 毛片网站在线免费观看| 在线观看国产精品入口| 精品小视频在线观看| 国产激情视频网站| 成人亚洲综合| 久久久免费人体| 91看片在线免费观看| 日韩电影在线观看一区二区| 欧美精品一区二区三区免费播放| 亚洲精品午夜级久久久久| 伊人男人综合视频网| 黄网站免费在线观看| 国产成人亚洲欧美电影| 午夜影院网站| 麻豆视频成人| 精品久久久久久久久久岛国gif| 黄视频在线免费| 91tv亚洲精品香蕉国产一区| 欧美极品视频| 亚洲精品91在线| 欧美激情手机在线视频| 国产中文字幕视频在线观看| 红桃视频亚洲| av电影在线观看一区| 在线免费观看av网| 看免费黄色录像| 波多野结衣亚洲色图|