2014-09-22 83 views
0

我有一對夫婦圖像按鈕在我的佈局一個已經繪製的是,當看到一個被點擊的時候,它的圖像資源設置爲不可見圖像按鈕,看不見的,將其設置爲可見這樣增加的背景與資源

btn1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 

      btnmt2.setImageResource(R.drawable.happy); 
      btnmt2.setVisibility(View.VISIBLE); 
      btnmt2.setScaleType(ImageView.ScaleType.FIT_CENTER); 
      btnmt2.setPadding(5,5,5,5); 

但可見圖像按鈕有一個背景(背景是一個陰影在xml中定義爲幾個形狀)我想圖像保持這個背景,當它被移動到不可見的一個,所以我試圖在xml中添加這個無濟於事,圖像資源似乎失去了縮放,或其填充,延伸到背景的全部大小,所以我嘗試將它添加到我的java文件中,這些工作圍繞着已棄用的方法,像這樣

if (android.os.Build.VERSION.SDK_INT < 16) { 
    btnmt2.setBackgroundResource(R.drawable.dropshadow); 
} else { 
    btnmt2.setBackground(getResources().getDrawable(R.drawable.dropshadow)); 
} 

這保持規模和填充但背景心不是添加的,任何人可以幫助我,不知道它的我的XML圖像,這是

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
<item > 
    <shape 
     android:shape="rectangle"> 
     <solid android:color="@android:color/transparent" /> 
     <corners android:radius="5dp"/> 
    </shape> 
</item> 
<item android:right="18dp" android:left="18dp" android:top="10dp" android:bottom="4dp"> 
    <shape 
     android:shape="rectangle"> 
     <solid android:color="@android:color/darker_gray"/> 
     <corners android:radius="10dp"/> 
    </shape> 
</item> 
</layer-list> 

回答

0

實際上,有一個已知的bug,其中設置一個視圖的通過資源文件的背景可能會導致它丟失填充(儘管如此,還需要參考鏈接。稍後再看)。

實際上我用這3種方法來解決這個問題,通過保存和之前恢復填充/後的圖像實際上是加載:

public static void setBackgroundResourceAndKeepPadding(View v, int resourceId) { 
    int top = v.getPaddingTop(); 
    int left = v.getPaddingLeft(); 
    int right = v.getPaddingRight(); 
    int bottom = v.getPaddingBottom(); 

    v.setBackgroundResource(resourceId); 
    v.setPadding(left, top, right, bottom); 
} 

public static void setBackgroundDrawableAndKeepPadding(View v, Drawable drawable) { 
    int top = v.getPaddingTop(); 
    int left = v.getPaddingLeft(); 
    int right = v.getPaddingRight(); 
    int bottom = v.getPaddingBottom(); 

    setBackgroundDrawable(v, drawable); 
    v.setPadding(left, top, right, bottom); 
} 

@SuppressLint("NewApi") 
public static void setBackgroundDrawable(View v, Drawable drawable){   
    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN) v.setBackgroundDrawable(drawable); 
    else v.setBackground(drawable); 
} 

調用或者那些setBackgroundResourceAndKeepPadding()方法應該環遊損失您正在運行的填充問題。

但是,這是假設您在設置背景圖像之前設置了填充;否則你的新填充(它似乎是5px)是什麼將接管。如果情況也是如此,您可能需要確保這不是您遇到的問題的一部分,因爲高分辨率設備上的5像素幾乎不存在。

+0

0123對不起,我的初學者實現了你的代碼,並坐在那裏告訴我方法setBackgroundResourceAndKeepPadding從來沒有使用過,我有麻煩聲明它在哪裏需要聲明它的方法來將它應用到視圖?謝謝 – martinseal1987 2014-09-22 21:35:52

+0

他們是靜態方法,可隨時隨地從應用程序中使用。假設它們是名爲ViewHelper的類的一部分,那麼您可以像訪問其中的一個:ViewHelper.setBackgroundResourceAndKeepPadding(v,R.drawable.icon); – Guardanis 2014-09-23 14:15:12