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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【自定义Android带图片和文字的ImageButton】

發布時間:2025/3/15 Android 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【自定义Android带图片和文字的ImageButton】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前言

現在移動設備的按鈕設計講究大圖標小文字,希望用戶只要一看到圖標便能知道這個按鈕是干嘛的,但又要有必要的文字提示,最常見的就數搜索按鈕了,上面一個大大的放大鏡圖標,下面兩個字——搜索。

Bill最近也在做具有這種效果的按鈕,過程總是曲折的,不過結果總是美好滴~現在Bill把其做法分享給大家,希望對還不會的朋友有所幫助。

先看看bill曲折的過程吧,也許里面就有你的影子:

最開始以為直接利用Android控件ImageButton即可完事,誰知事不如人料,ImageButton只能顯示圖片,并不能對其添加文字,此想法不攻自破。

于是我想到了直接用Button,但是Button的文字卻是顯示在圖片內部,并不能達到我的需求。放棄。

懶人總有懶人的辦法,我可以直接在圖片下方PS需要的文字嘛,然后把P好的圖片放進ImageButton就好了。此法十分簡單好用。但是,一旦我們需要改變文字,或者我要把文字顯示在圖片頂部而不是底部怎么辦?此法雖簡單,卻缺乏可變性。放棄。

這就是所謂的“一鈕三折”了~

那么,有沒有一種方法既能夠擁有Button的效果,又能夠實現Button顯示的自定義呢?

答案是肯定的,接下來,bill將一步一步詳細解釋這個按鈕的制作過程。

?

思路

首先,我們來看一下這個按鈕的實現思路。有一種思維方式叫做“out?of?box”,也就是鼓勵大家跳出固定思維模式以尋求新的突破。但是在“跳出箱子”之前,我們必須首先知道困住我們思維的“箱子”是什么。

在這里,這個箱子就是“按鈕”。我們一直在想,如何去實現這個“按鈕”,怎么才能讓“按鈕”顯示出圖片,然后在圖片下面還顯示一行字。我們就在“按鈕”這個箱子里糾結。

但實際上,當我們發現所謂的“按鈕”其實就是一個View的時候,一切就變得簡單了。

它只不過是一個可點擊、可設置監聽、可顯示文字或者圖片的View而已。那么我們就跳出Android給我們設置的這個箱子,自己重新造一個具有我們需要的功能和外觀的View不就OK了?

經過分析,上述按鈕效果實際上就是一個布局,一個最簡單不過的垂直線性布局,上部分是一個ImageView,下部分是一個TextView,這個布局可點擊、可設置監聽。

我們首先要編寫自己的ImageButton類,然后在主布局文件中為我們自定義的Button編寫布局,最后在Activity中調用我們自定義ImageButton即可。

那么接下來我們就一起來實現這個簡單的LinearLayout。

?

編碼實現自己的ImageButton

在編寫我們自己的ImageButton之前,如果讀者并不清楚如何在一個靜態的xml布局文件中動態地加載子布局,請先閱讀下面的博文(此文言簡意賅,已經寫得很清楚了,bill就不再贅述)

?

http://blog.csdn.net/lzx_bupt/article/details/5600187

?

首先,我們編寫一個MyImageButton類,繼承自LinearLayout

?

  • package?com.billhoo.study;?
  • ?
  • import?android.content.Context;?
  • import?android.widget.ImageView;?
  • import?android.widget.LinearLayout;?
  • import?android.widget.TextView;?
  • ?
  • //自定義ImageButton,模擬ImageButton,并在其下方顯示文字?
  • //提供Button的部分接口?
  • public?class?MyImageButton?extends?LinearLayout?{?
  • ?
  • ??public?MyImageButton(Context?context,?int?imageResId,?int?textResId)?{?
  • ????super(context);?
  • ?
  • ????mButtonImage?=?new?ImageView(context);?
  • ????mButtonText?=?new?TextView(context);?
  • ?
  • ????setImageResource(imageResId);?
  • ????mButtonImage.setPadding(0,?0,?0,?0);?
  • ?
  • ????setText(textResId);?
  • ????setTextColor(0xFF000000);?
  • ????mButtonText.setPadding(0,?0,?0,?0);?
  • ?
  • ????//設置本布局的屬性?
  • ????setClickable(true);??//可點擊?
  • ????setFocusable(true);??//可聚焦?
  • ????setBackgroundResource(android.R.drawable.btn_default);??//布局才用普通按鈕的背景?
  • ????setOrientation(LinearLayout.VERTICAL);??//垂直布局?
  • ?????
  • ????//首先添加Image,然后才添加Text?
  • ????//添加順序將會影響布局效果?
  • ????addView(mButtonImage);?
  • ????addView(mButtonText);?
  • ??}?
  • ?
  • ??//?----------------public?method-----------------------------?
  • ??/*?
  • ???*?setImageResource方法?
  • ???*/?
  • ??public?void?setImageResource(int?resId)?{?
  • ????mButtonImage.setImageResource(resId);?
  • ??}?
  • ?
  • ??/*?
  • ???*?setText方法?
  • ???*/?
  • ??public?void?setText(int?resId)?{?
  • ????mButtonText.setText(resId);?
  • ??}?
  • ?
  • ??public?void?setText(CharSequence?buttonText)?{?
  • ????mButtonText.setText(buttonText);?
  • ??}?
  • ?
  • ??/*?
  • ???*?setTextColor方法?
  • ???*/?
  • ??public?void?setTextColor(int?color)?{?
  • ????mButtonText.setTextColor(color);?
  • ??}?
  • ?
  • ??//?----------------private?attribute-----------------------------?
  • ??private?ImageView?mButtonImage?=?null;?
  • ??private?TextView?mButtonText?=?null;?
  • }?
  • ?

    然后在main布局中為我們自定義的Button寫xml布局,注意,我們的“按鈕”實際上是一個線性布局,因此xml中應該寫LinearLayout而不是Button或者ImageButton

    ?

    ?

    ?

  • <?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">?
  • ?
  • ????<!--?這就是我們的“數據管理按鈕”?-->?
  • ????<LinearLayout?android:id="@+id/ll_bt_data_config"?
  • ????????android:layout_width="wrap_content"?android:layout_height="wrap_content"?/>?
  • ?
  • </LinearLayout>?
  • ?

    最后,在Activity中為我們自定義的按鈕設置監聽

    ?

    ?

    ?

  • package?com.billhoo.study;?
  • ?
  • import?android.app.Activity;?
  • import?android.os.Bundle;?
  • import?android.view.View;?
  • import?android.widget.Button;?
  • import?android.widget.LinearLayout;?
  • ?
  • public?class?TestActivity?extends?Activity?{?
  • ??/**?Called?when?the?activity?is?first?created.?*/?
  • ??@Override?
  • ??public?void?onCreate(Bundle?savedInstanceState)?{?
  • ????super.onCreate(savedInstanceState);?
  • ????setContentView(R.layout.main);?
  • ?
  • ????btDataConfig?=?new?MyImageButton(this,?R.drawable.option,?R.string.text);?
  • ?????
  • ????//獲取包裹本按鈕的容器?
  • ????llbtDataConfig?=?(LinearLayout)?findViewById(R.id.ll_bt_data_config);?
  • ?????
  • ????//將我們自定義的Button添加進這個容器?
  • ????llbtDataConfig.addView(btDataConfig);?
  • ?
  • ????//設置按鈕的監聽?
  • ????btDataConfig.setOnClickListener(new?Button.OnClickListener()?{?
  • ??????@Override?
  • ??????public?void?onClick(View?v)?{?
  • ????????btDataConfig.setText("按鈕被點擊過了");?
  • ??????}?
  • ????});?
  • ??}?
  • ?
  • ??private?LinearLayout?llbtDataConfig?=?null;??//main布局中包裹本按鈕的容器?
  • ??private?MyImageButton?btDataConfig?=?null;?
  • }?
  • ?

    效果

    ?

    ??

    擴展

    大家還可以自己擴展這個類的功能,比如可以設置文字的環繞位置,大小控制等等

    ?

    本文出自 “Bill_Hoo專欄” 博客,請務必保留此出處http://billhoo.blog.51cto.com/2337751/772442

    總結

    以上是生活随笔為你收集整理的【自定义Android带图片和文字的ImageButton】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。