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

首頁 > 系統 > Android > 正文

Android開發技巧之像QQ一樣輸入文字和表情圖像

2020-04-11 12:32:37
字體:
來源:轉載
供稿:網友
EditText和TextView一樣,也可以進行圖文混排。所不同的是,TextView只用于顯示圖文混排效果,而EditText不僅可顯示,也可混合輸入文字和圖像,讓我們先回顧一下圖5.2所示的QQ聊天輸入框,在輸入框中可以同時輸入文字和表情圖像。實際上,這種效果在Android SDK中只需要幾行代碼就可以實現。為了使讀者更有學習的沖動,先來欣賞一下即將實現的效果,如圖5.16所示。

圖5.16 在EditText控件中輸入文字和圖像
為了實現這個程序,首先來準備一些要用到的素材,也就是要在EditText控件中輸入的圖像文件。本例準備了9個png圖像文件(face1.png至face9.png),都放在了res/drawable目錄中。
接下來在屏幕上放一個只能顯示3行(可輸入多行)的EditText和一個Button,布局文件的代碼如下:
復制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<EditText android:id="@+id/edittext" android:layout_width="fill_parent"
android:layout_height="wrap_content" android:lines="3" android:gravity="left|top"/>
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="隨機插入表情"
android:onClick="onClick_RandomFace" android:layout_marginTop="10dp" />
</LinearLayout>

上面代碼的<EditText>標簽中將android:gravity屬性值設為left|top。以使輸入的文本從左上角開始顯示,如果不設置該屬性,則輸入的文本會從左側中心位置開始顯示(由于設置了android:line=”3”,因此,EditText可同時顯示三行的內容,所以會存在這個問題,如果只顯示一行,則不存在這個問題)。

<Button>標簽的android:onClick屬性值指定了單擊事件方法(onClick_RandomFace),在該方法中隨機獲得了face1.png至face9.png中任意一個圖像資源的ID。最常用的方法是將這9個圖像資源ID放到數組中,然后隨機產生一個數組索引來獲取相應的圖像資源ID。但本例未采用這種方法,而是采用了直接通過反射技術從R.drawable類中獲得圖像資源ID的方法。這種方法的好處是一但圖像資源非常多時,可以不需要在數組中挨個定義就可以獲得任意的圖像資源ID。

在5.2.2節使用了<img>標簽來插入圖像,雖然在EditText控件中插入圖像也可采用這種方法。但本例使用了另外一種更簡單的方法,就是使用android.text.style.ImageSpan類來直接插入圖像。下面來看看具體的實現代碼。
復制代碼 代碼如下:

public void onClick_RandomFace(View view)
{
// 隨機產生1至9的整數
int randomId = 1 + new Random().nextInt(9);
try
{
// 根據隨機產生的1至9的整數從R.drawable類中獲得相應資源ID(靜態變量)的Field對象
Field field = R.drawable.class.getDeclaredField("face" + randomId);
// 獲得資源ID的值,也就是靜態變量的值
int resourceId = Integer.parseInt(field.get(null).toString());
// 根據資源ID獲得資源圖像的Bitmap對象
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), resourceId);
// 根據Bitmap對象創建ImageSpan對象
ImageSpan imageSpan = new ImageSpan(this, bitmap);
// 創建一個SpannableString對象,以便插入用ImageSpan對象封裝的圖像
SpannableString spannableString = new SpannableString("face");
// 用ImageSpan對象替換face
spannableString.setSpan(imageSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
// 將隨機獲得的圖像追加到EditText控件的最后
edittext.append(spannableString);
}
catch (Exception e)
{
}
}

編寫上面代碼需要注意如下幾點
1. 由于R.drawable中的資源ID都是public的靜態變量,因此,可直接使用Field.get方法獲得這些變量的值。如果是private或protected的變量,需要field.setAccessible(true)設置變量值的訪問權限才可以讀寫這些變量。
2. 使用Field.get方法獲得變量值時,如果是靜態變量。Field.get方法的參數值設為null即可。如果不是靜態變量,需要為Field.get方法指定一個變量所在類的對象作為參數值。
3. 由于EditText類不能直接插入Span對象,因此,需要先使用SpannableString對象來封裝Span對象(如本例中的ImageSpan對象),再將SpannableString對象插入到EditText控件中。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美aaa| 亚洲第一男人av| 色爱av美腿丝袜综合粉嫩av| 亚洲一区二区久久久| 欧美日韩色婷婷| 国产精品一区二区三区免费视频| 国产精品久久久久久久av大片| 亚洲电影免费在线观看| 国产一区欧美二区三区| 欧美国产日本在线| 国产综合视频在线观看| 久久精品电影网站| 91精品国产99| 亚洲精品一区中文| 日韩在线观看视频免费| 欧美亚洲成人免费| 久久亚洲国产成人| 日韩欧美中文在线| 亚洲一区二区三区四区在线播放| 久久视频在线免费观看| 国产亚洲美女久久| 在线观看日韩www视频免费| 欧美激情高清视频| 成人免费在线网址| 亚洲精品白浆高清久久久久久| 色综合久久久久久中文网| 亚洲第一精品夜夜躁人人躁| 亚洲偷熟乱区亚洲香蕉av| 久久久久久高潮国产精品视| 久久久噜噜噜久久中文字免| 中文字幕日韩精品在线观看| 黄网动漫久久久| 国产日韩专区在线| 欧美专区在线观看| 日韩电影免费在线观看| 一区二区三区视频观看| 欧美一级在线亚洲天堂| 亚洲成av人乱码色午夜| 欧美福利视频在线观看| 日韩在线www| 国产精品小说在线| 热久久这里只有| 成人福利视频在线观看| 综合欧美国产视频二区| 在线日韩精品视频| 日韩av一区在线| 国产99久久精品一区二区 夜夜躁日日躁| 欧美成人激情图片网| 国产精品高潮呻吟久久av野狼| 91免费电影网站| 国产精品va在线播放| 全亚洲最色的网站在线观看| 成人精品视频在线| 91在线视频导航| 久久精品一偷一偷国产| 欧美一区视频在线| 国产噜噜噜噜久久久久久久久| 18一19gay欧美视频网站| 98精品国产自产在线观看| 1769国产精品| 亚洲一级黄色av| 日韩av在线免费观看| 亚洲精选中文字幕| 亚洲精品一区二区三区不| 久久视频在线直播| 日韩国产一区三区| 国产精品极品尤物在线观看| 国产精品欧美日韩| 97在线视频国产| 久久在线观看视频| 成人亚洲综合色就1024| 欧洲成人免费视频| 国产91ⅴ在线精品免费观看| 美女性感视频久久久| 国产日韩精品电影| 久久琪琪电影院| 55夜色66夜色国产精品视频| 精品成人国产在线观看男人呻吟| 国产suv精品一区二区三区88区| 日韩视频精品在线| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲视频综合网| 欧美激情图片区| 欧美日韩999| 国模私拍视频一区| 久久夜色精品亚洲噜噜国产mv| 国产成人午夜视频网址| 91视频8mav| 欧美成人精品在线视频| 亚洲在线一区二区| 91成人天堂久久成人| 日韩在线播放av| 亚洲国产女人aaa毛片在线| 国产97在线|日韩| 国产精品美女视频网站| 日韩电影中文字幕在线| 亚洲色图校园春色| 久久精品国产亚洲精品2020| 国产美女精品视频免费观看| 亚洲欧美精品一区| 高跟丝袜欧美一区| 国产一区深夜福利| 欧美一级视频在线观看| 亚洲网站在线播放| 亚洲电影在线观看| 国产精品久久久久久久久久久久久久| 欧美极品少妇xxxxⅹ免费视频| 亚洲国产精品成人精品| 欧美日韩美女在线观看| 欧美国产日韩中文字幕在线| 91av视频在线观看| 精品久久久av| 精品国产视频在线| 亚洲激情视频在线播放| 黑人巨大精品欧美一区二区三区| 欧美一区二区三区……| 国产精品青草久久久久福利99| 欧美成人性生活| 亚洲国产精品高清久久久| 精品呦交小u女在线| 日本在线观看天堂男亚洲| 欧美激情中文字幕乱码免费| 日韩美女视频中文字幕| 精品视频久久久| 国产91精品不卡视频| 日韩精品久久久久久福利| 成人做爰www免费看视频网站| 亚洲白虎美女被爆操| 日韩欧美一区视频| 亚洲无线码在线一区观看| 成人免费网站在线| 成人网在线视频| 91在线观看免费网站| 亚洲欧美另类中文字幕| 亚洲一级免费视频| 久久九九精品99国产精品| 亚洲综合小说区| 久久成人综合视频| 日韩精品久久久久久福利| 国内自拍欧美激情| 欧美做受高潮1| 亚洲一区精品电影| 欧美一区二区视频97| 国产婷婷色综合av蜜臀av| 91久久国产综合久久91精品网站| 亚洲a区在线视频| 日本一区二区三区在线播放| 亚洲国产精品一区二区三区| 国产日韩欧美视频在线| 7777免费精品视频| 亚洲人成77777在线观看网| 亚洲精品短视频| 国产精品久久久999| 亚洲夜晚福利在线观看| 精品国产电影一区| 久久久免费观看视频| 国产精品福利久久久| 91产国在线观看动作片喷水| www.久久色.com| 国产综合久久久久| 久久久久久国产精品久久| 欧美日韩精品在线| 国产一区二区美女视频| 欧美精品videos另类日本|