2014-12-01 75 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

相关问题