我有一个HorizontalListView https://github.com/vieux/Android-Horizontal-ListView,里面有几个项目,每个项目都有一个相对的布局,其中包含一些文本和一个图像。我已经为这个相对布局添加了一个选择器,它在更新的android版本中效果很好,设置为白色,当按下时,每个项目的相对布局都是白色的。
问题是,在安卓的老版本中,当我滚动时,HorizontalListview开始变得奇怪,这是因为我在每个相对布局中都添加了android:clickable="true“。如果我删除这个属性,HLV开始正常工作,但是选择器不工作。
这是我的布局:
<RelativeLayout
android:id="@+id/marcoNota"
android:layout_width="@dimen/tile_width"
android:layout_height="@dimen/tile_height"
android:background="@drawable/tile_selector"
android:clickable="true"
android:paddingBottom="2dp"
android:paddingTop="2dp"
android:paddingLeft="2dp"
android:paddingRight="2dp">
</RelativeLayout>我甚至尝试在适配器上设置onTouchListener,也得到了同样的结果。
我想知道是否有可能使用选择器空白设置Clickable="true“或任何解决方法。
发布于 2012-11-01 07:19:30
我解决了在HorizontalListView.java中实现以下方法的问题:
这用于检测Action_UP (当用户将手指从所选视图上移开并绘制相对布局,将其保持为默认颜色时):
@Override
public boolean onTouchEvent(MotionEvent event) {
if(habilitar){
if (event.getAction() == android.view.MotionEvent.ACTION_UP ||event.getAction() == android.view.MotionEvent.ACTION_CANCEL){
for(int i=0;i<getChildCount();i++){
View child = getChildAt(i);
if (isEventWithinView2(event, child)) {
if(mOnItemUnSelectedListener != null){
mOnItemUnSelectedListener.onItemUnSelected(child);
}
break;
}
if(mOnItemUnSelectedListener != null && child != null){
mOnItemUnSelectedListener.onItemUnSelected(child);
}
}
}
}
return true;
}在mOnGesture手势检测器声明中,我在onDown方法中添加了此功能。这允许在用户按下视图时绘制包含内容的所选项目相对布局:
for(int i=0;i<getChildCount();i++){
View child = getChildAt(i);
if (isEventWithinView2(e, child)) {
if(mOnItemSelected != null){
mOnItemSelected.onItemSelected(HorizontalListView.this, child, mLeftViewIndex + 1 + i, mAdapter.getItemId( mLeftViewIndex + 1 + i ));
}
break;
}
}然后我添加了一些侦听器,以允许适配器绘制按下的视图,对于取消选择的侦听器,我实现了以下接口:
private OnItemUnSelectedListener mOnItemUnSelectedListener;
public void setOnItemUnSelectedListener(OnItemUnSelectedListener listener ){
mOnItemUnSelectedListener = listener;
}
public interface OnItemUnSelectedListener{
public void onItemUnSelected(View v);
}对于item selected listener,我使用了类中已经定义的监听器:
private OnItemSelectedListener mOnItemSelected;最后,在我的适配器中,我设置了监听器:
HorizontalListView listview = (HorizontalListView) retval.findViewById(R.id.listviewH);
listview.setOnItemSelectedListener(this);
listview.setOnItemUnSelectedListener(this);我根据用户是否按下视图来设置布局的颜色
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,long arg3) {
if(arg1.findViewById(R.id.marcoNota) != null){
arg1.findViewById(R.id.marcoNota).setBackgroundColor(Color.WHITE);
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
@Override
public void onItemUnSelected(View v) {
if(v.findViewById(R.id.marcoNota) != null){
v.findViewById(R.id.marcoNota).setBackgroundColor(Color.BLACK);
}
}我知道这是一个非常具体的问题,但如果有人需要这样做的话,这里就是这个问题。
https://stackoverflow.com/questions/13163936
复制相似问题