日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

android自定义控件中文乱码,Android笔记--自定义View之组合控件

發(fā)布時間:2025/4/16 Android 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android自定义控件中文乱码,Android笔记--自定义View之组合控件 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Android-自定義View

分享是最好的記憶--

如需轉(zhuǎn)發(fā)請注明出處

[強調(diào)]:共同學(xué)習(xí) 共同進步 不喜勿噴

內(nèi)容簡介

前言

實現(xiàn)

總結(jié)

1. 前言

這次更新有2個目的

1. 復(fù)用控件,而不是每次都寫冗余代碼

2. 好久沒有更新了(?? . ??)

在Android開發(fā)當(dāng)中自定義View是一項不可或缺的技能,也是我們大部分小白以及小小白的軟肋。

自定義View其實也不是很難,因為我們不需要攻克什么技術(shù)難關(guān),只需要坐在巨人的肩膀上,抱緊巨人的腦袋就行(?>ω

自定義View分兩大類:

一 : 組合 : 也就是在現(xiàn)有的控件基礎(chǔ)上通過組合各種不同功能的控件來組合出功能更強大全民的新控件。

二 : 完全自定義:通過繼承View或者ViewGroup來自定義全新的View。??今天討論的自定義View是第一種方式,即組合方式。如果想了解完全自定義或者更多自定義方面的知識,推薦看扔物線大神以及張鴻翔大神的文章。

2. 實現(xiàn)

1. 確定需求

功能列表中的Item是我們經(jīng)常用到的控件之一。它也許是這樣的:

item1.png

或者是這樣的:

item2.png

再或者是這樣的:

item3.png

為了滿足這些情況,我們抽象出功能最豐富的Item;確定了需求之后開始編碼。

2. 編碼

1. 自定義屬性

首先確定我們需要動態(tài)設(shè)置的屬性;包括 :1-左邊圖片,2-3-左邊圖片的寬高,4-大標(biāo)題,5-大標(biāo)題文字大小,6-大標(biāo)題文字顏色,7-副標(biāo)題,8-副標(biāo)題文字大小,9-副標(biāo)題文字顏色,10-右邊圖片,11-12-右邊圖片寬高等12個屬性,當(dāng)然不止這些,這個可以根據(jù)自己的需求豐富,比如 Item 下面是否顯示陰影線條,右邊圖片是否顯示等;

那么在../res/attrs.xml中定義自定義屬性;

這里有必要解釋一下屬性定義中的format

name

format

描述

資源

reference

通過id來指定資源

顏色

color

設(shè)置顏色

尺寸

dimension

長寬,字體大小等尺寸

字符串

String

設(shè)置文本

布爾值

boolean

通過布爾值設(shè)置

浮點值

float

設(shè)置浮點值

百分數(shù)

fraction

設(shè)置百分數(shù)值

枚舉值

enum

設(shè)置枚舉值

位或運算

flag

位或運算

整型值

integer

設(shè)置整型

屬性定義時可以指定多種類型值

2.抽象組建

這里說的抽象組建是把該Item可能有的所有功能都寫出來;

在../res/layout/item.xml中寫出包含組建所有功能的樣式;

android:layout_width="match_parent"

android:layout_height="wrap_content">

style="@style/UILibraryListItemBase"

android:id="@+id/leftImg"

android:layout_alignParentLeft="true"

android:padding="8dp"

/>

style="@style/UILibraryListItemBase"

android:id="@+id/title"

android:layout_toRightOf="@+id/leftImg"

/>

style="@style/UILibraryListItemBase"

android:id="@+id/subTitle"

android:layout_toLeftOf="@+id/rightImg"

android:layout_toRightOf="@+id/title"

android:gravity="right"

/>

style="@style/UILibraryListItemBase"

android:id="@+id/rightImg"

android:layout_alignParentRight="true"

android:padding="8dp"

/>

android:layout_width="match_parent"

android:layout_height="0.5dp"

android:layout_alignBottom="@+id/leftImg"

/>

3.實現(xiàn)功能

選擇一個適當(dāng)?shù)腣iewGroup來繼承,實現(xiàn)Item;

我的樣式中rootView是個RelativeLayout,因此我繼承了RelativeLayout。具體實現(xiàn)如下:

package com.uilib.ui.listitem;

import android.content.Context;

import android.content.res.TypedArray;

import android.graphics.Color;

import android.graphics.drawable.Drawable;

import android.text.TextUtils;

import android.util.AttributeSet;

import android.view.View;

import android.widget.ImageView;

import android.widget.RelativeLayout;

import android.widget.TextView;

import com.example.uilibrary.R;

import com.uilib.ui.util.FindView;

/**

* Created by Elyar.Anwar on 2017/8/10.

*/

public class UILibraryListItem extends RelativeLayout {

/**

* 選項控件的左邊圖片

*/

private ImageView leftImageView;

/**

* 選項控件的右邊圖片

*/

private ImageView rightImageView;

/**

* 選項控件的標(biāo)題

*/

private TextView titleView;

/**

* 選項控件的副標(biāo)題

*/

private TextView subTitleView;

/**

* 左邊圖片資源

*/

private Drawable leftImage;

/**

* 左邊圖片資源寬度

*/

private int leftImageWidth;

/**

* 左邊圖片資源高度

*/

private int leftImageHeight;

/**

* 右邊圖片資源

*/

private Drawable rightImage;

/**

* 右邊圖片資源寬度

*/

private int rightImageWidth;

/**

* 右邊圖片資源高度

*/

private int rightImageHeight;

/**

* 標(biāo)題文本

*/

private String title;

/**

* 標(biāo)題文本顏色

*/

private int titleTextColor;

/**

*標(biāo)題文本字體大小

*/

private float titleTextSize;

/**

*副標(biāo)題文本

*/

private String subTitle;

/**

*副標(biāo)題文本顏色

*/

private int subTitleTextColor;

/**

*副標(biāo)題文本字體大小

*/

private float subTitleTextSize;

/**

*上下文

*/

private Context mContext;

/**

* 屬性結(jié)合

*/

private AttributeSet attrs;

public UILibraryListItem(Context context) {

this(context,null);

}

public UILibraryListItem(Context context, AttributeSet attrs) {

this(context, attrs,0);

this.mContext = context;

this.attrs = attrs;

init();

}

public UILibraryListItem(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

this.mContext = context;

this.attrs = attrs;

init();

}

/**

* 初始化視圖

*/

private void init() {

View.inflate(mContext, R.layout.listitem, this);

findView();//綁定視圖

loadParams();//加載屬性值

initView();//為視圖賦值

}

/**

* 為控件賦值

*/

private void initView() {

if(leftImage!=null){

leftImageView.setImageDrawable(leftImage);

}

leftImageView.getLayoutParams().width = leftImageWidth;

leftImageView.getLayoutParams().height = leftImageHeight;

if(rightImage!=null){

rightImageView.setImageDrawable(rightImage);

}

rightImageView.getLayoutParams().width = rightImageWidth;

rightImageView.getLayoutParams().height = rightImageHeight;

if (!TextUtils.isEmpty(title)){

titleView.setText(title);

titleView.setTextColor(titleTextColor);

titleView.setTextSize(titleTextSize);

}

if (!TextUtils.isEmpty(subTitle)){

subTitleView.setText(subTitle);

subTitleView.setTextColor(subTitleTextColor);

subTitleView.setTextSize(subTitleTextSize);

}

}

/**

* 初始化控件的屬性

*/

private void loadParams() {

TypedArray typedArray = mContext.obtainStyledAttributes(attrs,R.styleable.UILibraryListItem);

leftImage = typedArray.getDrawable(R.styleable.UILibraryListItem_leftImg);

leftImageHeight = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_leftImg_height,128);

leftImageWidth = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_leftImg_width,128);

rightImage = typedArray.getDrawable(R.styleable.UILibraryListItem_rightImg);

rightImageHeight = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_rightImg_height,128);

rightImageWidth = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_rightImg_width,128);

title = typedArray.getString(R.styleable.UILibraryListItem_title);

titleTextColor = typedArray.getColor(R.styleable.UILibraryListItem_title_color,Color.BLACK);

titleTextSize = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_title_size,20);

subTitle = typedArray.getString(R.styleable.UILibraryListItem_subTitle);

subTitleTextColor = typedArray.getColor(R.styleable.UILibraryListItem_subTitle_color,Color.GRAY);

subTitleTextSize = typedArray.getDimensionPixelSize(R.styleable.UILibraryListItem_subTitle_size,14);

typedArray.recycle();

}

/**

* 關(guān)聯(lián)控件

*/

private void findView() {

leftImageView = FindView.findView(this,R.id.leftImg);

rightImageView = FindView.findView(this,R.id.rightImg);

titleView = FindView.findView(this,R.id.title);

subTitleView = FindView.findView(this,R.id.subTitle);

}

}

4.引用并預(yù)覽

引用時為了看出明顯效果我定義了2個Item;

xmlns:uilib="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical">

android:id="@+id/it"

android:layout_width="match_parent"

android:layout_height="wrap_content"

uilib:leftImg="@drawable/icon_a"

uilib:rightImg="@drawable/icon_b"

uilib:subTitle="SubTitle"

uilib:title="Title" />

android:id="@+id/it2"

android:layout_width="match_parent"

android:layout_height="wrap_content"

uilib:leftImg="@drawable/test_icon_allow"

uilib:subTitle="SubTitle"

uilib:subTitle_color="@color/red"

uilib:title="Title" />

于是完成結(jié)果如下:

2017-08-11_004205.png

可以根據(jù)自己的實際情況靈活改變樣式,且僅僅在第四步引用處做出更改即可;

總結(jié)

自定義View之組合;

通過組合來自定義View能滿足我們大部分的需求,且相對容易。

總結(jié)其過程:

1.自定義屬性

2.抽象出樣式

3.編碼實現(xiàn)類

4.引用和預(yù)覽

我是ElyarAnwar,在技術(shù)的道路上摸爬滾打;

熱愛生活,熱愛技術(shù);如果喜歡記得點贊;

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的android自定义控件中文乱码,Android笔记--自定义View之组合控件的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中国一级特黄毛片 | 国产一区二区三区黄 | 污片免费看 | 日日射日日操 | 大尺度做爰呻吟62集 | 天堂久久一区 | 爱爱福利社 | 国产一区二区在线播放视频 | 好妞色妞国产在线视频 | 九色tv| 六月婷婷七月丁香 | 91天堂素人 | 青青草在线视频免费观看 | 日本成人中文字幕 | 亚欧在线视频 | 午夜插插 | 在线视频网站 | 98久久久 | 毛片导航 | 丝袜综合网 | 国产又粗又猛又爽又黄的网站 | 欧美成人免费网站 | 欧美91精品久久久久国产性生爱 | 亚洲区一区二区三区 | 国产精品香蕉国产 | 永久免费精品 | 视频免费观看在线 | 国产午夜无码精品免费看奶水 | 精品人伦一区二区三 | 天堂√| 69堂精品| 牛牛影视一区二区三区 | 成人aaa| 国产男女猛烈无遮挡a片漫画 | 秋霞午夜鲁丝一区二区 | 亚洲欧美另类视频 | 女性裸体视频网站 | 韩国中文字幕hd久久精品 | 韩国伦理片在线播放 | 日日骚av| 加勒比hezyo黑人专区 | 亚洲天堂视频在线 | 牛牛澡牛牛爽一区二区 | 波多野结衣高清视频 | 东北少妇不戴套对白第一次 | 日本成人黄色片 | 久久公开视频 | 在线观看日韩中文字幕 | 午夜视频在线观看视频 | 狠狠爱五月婷婷 | 国产在线免费观看 | 亚洲一区二区三区四 | 女人18毛片毛片毛片毛片区二 | 美女扒开尿口给男人桶 | 亚洲综合久久av一区二区三区 | 日韩一级片免费观看 | 精品午夜福利视频 | 色玖玖| 欧美在线一级片 | 国产精品扒开做爽爽爽的视频 | 91精品国产综合久久福利软件 | 99久久免费看精品国产一区 | 精品无码久久久久久久久果冻 | 亚洲av色一区二区三区精品 | 精品人妻一区二区三区久久 | 亚洲成av人影院 | 国产精品videossex国产高清 | 成人午夜免费毛片 | 欧美亚洲少妇 | 中出亚洲| 日韩精品免费视频 | 香蕉黄色网 | 欧美熟妇精品黑人巨大一二三区 | 免费av一区二区三区 | 日本高清免费观看 | 78m78成人免费网站 | 樱桃国产成人精品视频 | 亚洲一区二区三区久久久成人动漫 | 国产成人精品二区三区亚瑟 | 久久国产精品精品国产 | 亚洲一级Av无码毛片久久精品 | 91手机在线播放 | 嫦娥性艳史bd | 成人3d动漫一区二区三区 | 性开放耄耋老妇hd | wwwwxxxx国产| 激情国产视频 | 日韩欧美日本 | 性xxxxbbbb| 久久久久成人精品 | 91se在线 | 污片在线看 | 无码精品一区二区三区在线 | 成人做爰100 | 色婷婷一区二区三区 | 很污的网站 | 暖暖av | 西西久久 | 亚洲人成在线免费观看 |