2014-12-01 106 views
2

這裏有很多關於SO請求的方法阻止子視圖複製其父母的按下或選擇狀態。 然而,我問這裏的其他方式:) - 我在我的應用程序之一,看到一個很奇怪的現象:

Android將父視圖的「按下」狀態傳遞給子視圖

當4.0.4設備上運行的應用程序(API 15)我看到的行爲與明顯的默認值匹配,即:父進程將其狀態轉發給其所有子視圖。

在更高的API級別(Android 4.4)上運行相同的應用程序而沒有任何更改時,此行爲會發生變化:父級不轉發其狀態。

我在xml佈局中爲所有相關的子視圖引入了duplicateParentState,但這在這裏似乎沒有幫助。

這是一個已知的「問題」或從API 15到API >> 15的行爲計劃中的變化嗎?
如何確保各州在所有API級別上正確轉發?

如果是任何幫助/相關這裏:我想複製其父母狀態是自定義ImageView它增加了tintColors子視圖 - 由於該行爲是正確的4.0.4不應該有在這一類中的任何錯誤?

public class INCImageView extends ImageView { 

    private int _tintColor; 
    private int _highlightedTintColor; 
    private int _selectedTintColor; 

    public INCImageView(Context context, AttributeSet attrs) { 
     super(context, attrs); 

     this.setFocusable(true); 
     this.setClickable(true); 

     TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.INCImageView); 

     _tintColor = array.getInt(R.styleable.INCImageView_tintColor, getResources().getColor(R.color.inc_tint)); 
     this.setColorFilter(_tintColor); 

     _selectedTintColor = array.getInt(R.styleable.INCImageView_selectedTintColor, _tintColor); 
     _highlightedTintColor = array.getInt(R.styleable.INCImageView_highlightedTintColor, _tintColor); 

     array.recycle(); 
    } 

    @Override 
    public void setSelected(boolean selected) { 
     super.setSelected(selected); 

     this.setColorFilter((selected ? _selectedTintColor : _tintColor)); 
    } 

    @Override 
    public void setPressed(boolean pressed) { 
     super.setPressed(pressed); 

     this.setColorFilter((pressed ? _highlightedTintColor : (this.isSelected() ? _selectedTintColor : _tintColor))); 
    } 
} 
+0

應該工作,你可以扭轉'super.set ...'和'setColorFilter'方法的順序嗎? – petey 2014-12-01 21:54:27

+0

是的,我可以扭轉它。 - 測試和仍然是相同的問題:( – Cabus 2014-12-01 22:02:01

+0

:(確實,你可以確認,INCImageView父母也是可以聚焦和點擊? – petey 2014-12-01 22:07:47

回答

1

我找到了解決辦法:

如果你看看ImageView子類以上,在構造函數中clickable & focusable設置爲true

原來這是錯誤的。當孩子本身可點擊時,家長不會轉發其狀態。 - 這仍然不能解釋爲什麼上面的代碼在4.0.4上工作,但在4.4上打破了

無論如何,離開clickable & focusable = false解決了這個問題。

+0

,但你沒有接受它作爲回答??? – Elltz 2014-12-02 01:22:45

+0

你只能接受你自己的問題的答案,你在2天后自己寫了自己的問題-.- – Cabus 2014-12-02 09:49:19

+0

哦,對不起,兄弟,我沒有想到.. .. .. – Elltz 2014-12-02 12:27:48

相關問題