Android中怎么让一个布局中所有控件都获得这个布局的点击状态

问题描述:

我在一个线性布局中有一个ImageView和一个TextView,怎么设置点击这个线性布局的时候ImageView处于选取状态,还有selector怎么设置

你可以在这个layout的点击事件中,设置ImageView的setPressed(true),这样就可以在selector中因公pressed的设置了

监听整个线性布局的点击事件,并在点击时对布局里面的所有相应控件进行状态的设置,所有控件都是可以通过代码进行状态设置的
setAnimation, setBackgroundColor, setBackgroundDrawable, setBackgroundResource, setClickable, setDrawingCacheBackgroundColor, setDrawingCacheEnabled, setDrawingCacheQuality, setDuplicateParentStateEnabled, setEnabled, setFadingEdgeLength, setFocusable, setFocusableInTouchMode, setHapticFeedbackEnabled, setHorizontalFadingEdgeEnabled, setHorizontalScrollBarEnabled, setId, setIsRootNamespace, setKeepScreenOn, setLayoutParams, setLongClickable, setMinimumHeight, setMinimumWidth, setNextFocusDownId, setNextFocusLeftId, setNextFocusRightId, setNextFocusUpId, setOnClickListener, setOnCreateContextMenuListener, setOnFocusChangeListener, setOnKeyListener, setOnLongClickListener, setOnTouchListener, setPadding, setPressed, setSaveEnabled, setScrollBarStyle, setScrollContainer, setSoundEffectsEnabled, setTag, setTouchDelegate, setVerticalFadingEdgeEnabled, setVerticalScrollBarEnabled, setVisibility, setWillNotCacheDrawing, setWillNotDraw

你可以这样:
对外层的布局添加一个点击事件:
在onclick()事件中 表现出对子控件的点击事件。
利用

 xxxx.performClick()

方法。

实际上你可以做一个透明的蒙层,从布局方面来着手更简单一些。直接对那个蒙层添加点击事件就行了。

在Activity中重新整个布局的Touch方法:

 @Override
    public boolean onTouchEvent(MotionEvent event) {
                imageView.setSelected(true);
        return super.onTouchEvent(event);
    }

在touch方法中加入imageView.setSelected(true);就可以实现点击整个布局的时候ImageView处于选取状态,ImageView的src你可以设置成你自定义的drawable
比如:

 <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:drawable="selected.png" />
    <item android:state_pressed="true" android:drawable="selected.png" />
    <item android:state_selected="false" android:drawable="unselected.png" />
    <item android:state_pressed="false" android:drawable="unselected.png" />
</selector>

至于TextView也类似如此
还有还想要在点击整个布局中某个LinearLayout(比如ImageView的父控件)时只要通过LinearLayout.setOnClickListener(listener1)或者LinearLayout.setOnTouchListener(listener1)然后重写相应的方法就行

我想你正需要它们:
setDuplicateParentStateEnabled 子控件获得父控件的状态,对应android:duplicateParentState
setAddStatesFromChildren 同上相反,对应android:addStatesFromChildren