Android 在customview中组合视图功能的良好实践

Android 在customview中组合视图功能的良好实践,android,android-layout,Android,Android Layout,我正在开发一个自定义的视图,它扩展自RelativeLayout, 包含两个ImageViews和一个EditText作为子视图 我想要一个ImageView和EditText像一个视图一样工作。因此,如果用户单击其中一个,它们都应获得焦点,用户应将其可视化,如下所示。EditText的默认焦点动画应保持不变,并且ImageView(vector drawable)上可绘制的图像也应更改其颜色。问题是,EditText需要两次单击才能调用onClick回调。我通过将其focusableInTou

我正在开发一个自定义的
视图
,它扩展自
RelativeLayout
, 包含两个
ImageView
s和一个
EditText
作为子视图

我想要一个
ImageView
EditText
像一个
视图一样工作。因此,如果用户单击其中一个,它们都应获得焦点,用户应将其可视化,如下所示。EditText的默认焦点动画应保持不变,并且
ImageView
(vector drawable)上可绘制的图像也应更改其颜色。问题是,
EditText
需要两次单击才能调用onClick回调。我通过将其
focusableInTouchMode
属性设置为
false
找到了解决方案。但是,使用此解决方案时,焦点会丢失

也许我应该通过编程方式解决这个问题,方法是覆盖
EditText
的onFocus回调,重定向到onClick方法,并在那里设置
ImageView
的焦点。但在可重用性方面,这似乎是一种不好的做法


那么,结合这两个视图的功能有什么好的做法呢?

设置一个
视图。在
相对视图上单击Listener
,然后在
编辑文本上单击
requestFocus()

mYourRelativeLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mYourEditText.requestFocus();
    }
});

设置
视图。在
RelativeLayout
上单击Listener
,然后在
编辑文本上单击
requestFocus()

mYourRelativeLayout.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        mYourEditText.requestFocus();
    }
});

什么意思?“不存在”?你又失去了对
EditText
的关注?在FocusChangedListeners上有什么特别的
吗?是的,我现在正在尝试这个回调。但是requestFocus()似乎从来都不起作用(我已经将focusable设置为true)。对我来说效果非常好。
EditText
总是
focusableInTouchMode
。看起来你的问题是一开始就把它设为false。很高兴你成功了。你什么意思?“不存在”?你又失去了对
EditText
的关注?在FocusChangedListeners上有什么特别的
吗?是的,我现在正在尝试这个回调。但是requestFocus()似乎从来都不起作用(我已经将focusable设置为true)。对我来说效果非常好。
EditText
总是
focusableInTouchMode
。看起来你的问题是一开始就把它设为false。很高兴你让它工作了。