實作過Button物件的人應該知道,Button除了設定背景圖外,還可以加上顯示的文字。Button的layoutheight & layoutwidth 若設為wrap_content Button就會依文字寬高或背景圖來呈現最剛好的尺寸。
在開發過程中,也許我們會因SDK版本升級,而造成Old SdkVersion的Button物件無法正常呈現(尺寸不同及跑位),其一的解決方法,就是拿ImageButton來替代Button,ImageButton才能設定背景圖,但ImageButton卻不能設定文字,我們得調整layout來達成圖文並茂的按鈕。
看到有人的解決方法是拿一個RelativeLayout或LinearLayout, 把ImageButton、TextView放入呈現
轉載自 http://blog.csdn.net/jju_zsb/article/details/8888075
<LinearLayout
android:id="@id/btn_bjqj"
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1.0"
android:background="@drawable/bg_table_item"
android:clickable="true"
android:orientation="vertical" >
<ImageButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="@null"
android:clickable="false"
android:contentDescription="@string/nav_bottom_tuijian"
android:focusable="false"
android:src="@drawable/ic_bjtj" />
<TextView
style="@style/LauncherTitleTextAppearance"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:gravity="center_horizontal"
android:paddingBottom="6dip"
android:text="@string/btn_bjqj"
android:textColor="@color/tab_bottom_text_color"
android:textSize="12.0sp" />
</LinearLayout>
轉載自:http://stackoverflow.com/questions/6115567/how-can-i-align-my-imageview-with-my-textview-in-a-linearlayout
<RelativeLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:id="@+id/headerLinearLay"
android:orientation="horizontal">
<ImageView
android:id="@+id/avatarImageView"
android:src="@drawable/icon"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></ImageView>
<TextView
android:id="@+id/usernameTextView"
android:text="TextView"
android:paddingLeft="4dp"
android:layout_toRightOf="@id/avatarImageView"
android:layout_centerVertical="true"
android:layout_height="wrap_content"
android:layout_width="wrap_content"></TextView>
</RelativeLayout>
以上兩種方法似乎都還不錯,不過因為我已經在RelativeLayout包了一堆Button及TextView,也排版好了,所以我就用Textview設定好文字及位,再依ImageButton來對齊TextView。
< RelativeLayout
android:id= "@+id/titleBar"
android:layout_width= "match_parent"
android:layout_height= "wrap_content"
android:background= "@drawable/topbarbg"
android:padding= "2dp" >
<TextView
android:id= "@+id/tv_cancel"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentLeft ="true"
android:layout_centerVertical ="true"
android:gravity= "center"
android:paddingLeft= "5dp"
android:paddingRight= "5dp"
android:text= "@string/cancel"
android:textColor= "@color/white" />
<ImageButton
android:id= "@+id/btn_cancel"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignLeft= "@+id/tv_cancel"
android:layout_alignRight= "@+id/tv_cancel"
android:layout_centerVertical ="true"
android:background= "@drawable/topbar5_button"
android:contentDescription= "@null" />
<TextView
android:id= "@+id/tv_finish"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentRight ="true"
android:layout_centerVertical ="true"
android:gravity= "center"
android:paddingLeft= "5dp"
android:paddingRight= "5dp"
android:text= "@string/finish"
android:textColor= "@color/white" />
<ImageButton
android:id= "@+id/btn_finish"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignLeft= "@+id/tv_finish"
android:layout_alignRight= "@+id/tv_finish"
android:layout_centerVertical ="true"
android:background= "@drawable/topbar5_button"
android:contentDescription= "@null" >
</ImageButton >
<TextView
android:id= "@+id/title"
android:layout_width= "fill_parent"
android:layout_height= "wrap_content"
android:layout_centerVertical ="true"
android:layout_toLeftOf= "@id/btn_finish"
android:layout_toRightOf= "@id/btn_cancel"
android:gravity= "center"
android:text= "@string/choicemember"
android:textColor= "@color/titletextcolor"
android:textSize= "26sp" />
</RelativeLayout >
好像也不會複雜而且又有一樣的效果。 不過..... 解決了一個問題,又來了一個問題。
我們再回來看Button這個物件,其實Button是個好用的物件,不過卻有那麼一些美中不足, 這次我想在按鈕上加上一個icon及文字,而文字就要剛好顯示在icon的旁邊。
<Button
android:id= "@+id/btn_sipcall"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_alignParentLeft ="true"
android:layout_centerVertical ="true"
android:layout_marginRight= "5dp"
android:layout_toLeftOf= "@+id/btn_sipclose"
android:background ="@drawable/bottombar_sip_call_button"
android:drawableLeft= "@drawable/call_sip_icon"
android:text= "@string/profile_sip_voice"
android:textColor= "@color/light_purple2" />
我發現有一個drawableLeft的屬性,可以把icon放在最左側,而文字就會被推擠往右一下。 android:drawableLeft= "@drawable/callsipicon" 還在想說怎麼這麼簡單就解決了,才知道icon不能對齊中間,而文字又只能顯示在中間,看來又得用調整Layout排版的方法來處理。
後來爬到一個好方法,原來還可以解一段程式碼,將按鈕和icon帶進去個別處理,這方法可以說是完美呀!
轉載自:http://www.it165.net/pro/html/201303/5202.html
public static void set_button_Drawable_center(final Context context,final Button button,final int imageID,final int spacing)
{
handler=new Handler();
runnable=new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
if(button.getMeasuredWidth() == 0)
{
handler.postDelayed(runnable, 0);
}else{
Drawable drawable=context.getResources().getDrawable(imageID);
int width=button.getMeasuredWidth();
int height=button.getMeasuredHeight();
int txt_width=(int)(button.getTextSize()*button.getText().length());
int txt_height=(int)(button.getLineCount()*button.getLineHeight());
int img_width=drawable.getIntrinsicWidth();
int img_height=drawable.getIntrinsicHeight();
int content_height=txt_height+img_height+spacing;
int content_width=txt_width+img_width+spacing;
int padding_w=width/2-content_width/2;
int padding_h=height/2-content_height/2;
button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
button.setPadding(padding_w,0,0,0);
button.setCompoundDrawablePadding(-padding_w);
}
}
};
handler.postDelayed(runnable, 0);
}
這樣就解決囉! 忍不住想給原作按個讚!
沒有留言:
張貼留言