問題の説明
私たちは、Drawableのは、あなたが見るために設定した場合、画像は、次のコードのように問題のコードが表示されないことがわかります取得します:
。描画可能な描画可能=のgetResources()getDrawable(R.drawable.bg_btn_green、NULL ); btn1.setCompoundDrawables(ヌル、描画可能な、NULL、NULL);
問題の原因
実際に取得された上記のように描画可能でコードsetBounds()サイズを備えていません
この問題を解決します
次のように、ライン上のsetBounds()に描画可能に設けられました:
drawable.setBounds(0、0、100、100)。
それはあなた自身を設定した固定値であるため、しかし、これは、適応サイズの問題を解決していません。ここではサイズに合わせて2つのアイデアがあります
最初の描画可能なXMLファイルにはベクトルである(ベクターは、通常、幅と高さを含んでいる)、またはXMLのアンドロイドを備えた背景などの内部寸法を含む:.幅=「100dp」とした場合アンドロイド:高さ=「100dp ":
<?xml version = "1.0"エンコード= "UTF-8"?> <形状のxmlns:アンドロイド= "http://schemas.android.com/apk/res/android" アンドロイド:形状 = "矩形"> <固体アンドロイド:色= "@色/ colorGreen4" /> <コーナーアンドロイド:半径= "5DP" /> <サイズアンドロイド:幅= "100dp" アンドロイド:高さ = "100dp" /> </形状>
その後、次の方法の適応サイズを選択することができます。
。描画可能な描画可能=のgetResources()getDrawable(R.drawable.bg_btn_green、NULL ); // drawable.setBounds(0、0、drawable.getIntrinsicWidth()、drawable.getIntrinsicHeight())。 drawable.setBounds(0、0 、drawable.getMinimumWidth()、drawable.getMinimumHeight())。 btn1.setCompoundDrawables(ヌル、描画可能な、NULL、NULL);
drawable.getIntrinsicWidth()、drawable.getIntrinsicHeight()は、内部の幅と高さを取得します
drawable.getMinimumWidth()、drawable.getMinimumHeight()は、推奨される最小幅と高さを取得します
第二に。何の内部寸法を描画可能なん
内部サイズなしのDrawableのは、一般的に、キー背景やチャットボックスの背景、または再分割ライン我々は唯一のコードの次の行に適応サイズで表示を必要とするこの時間です。
btn1.post(新しい新しい Runnableを(){ // ビューがのonCreateのライフサイクルで作成された大きさを測定していないので、我々は必要なときに並んDrawableの表示に加工されるので、 @Override 公共 のボイドRUNを(){ 描画可能な描画可能 getResources =()getDrawable(R.drawable.bg_btn_green、。NULL ); int型の幅= 0 ; int型の高さ= 0 ; IF(drawable.getIntrinsicWidth()== -1){ // それが示している場合は-1何の幅の値の 幅がない= btn1.getWidth(); //は、ビューの幅を取得 } 他 { 幅 = drawable.getIntrinsicWidth()。 } であれば(drawable.getIntrinsicHeight()== -1 ){ 高さ = btn1.getHeight()。 } 他{ 高さ = drawable.getIntrinsicHeight()。 } drawable.setBounds( 0、0 、幅、高さ)。 btn1.setBackground(描画可能)。 } })。
もしdrawable.getMinimumWidth()、drawable.getMinimumHeight()値がゼロになると判断される。コメント2に、この方法は、推奨される最小を示していない場合は0を返すので