读书人

点击弹出层如何处理点击到上面层

发布时间: 2012-12-16 12:02:32 作者: rapoo

点击弹出层如何避免点击到下面层 。
如在原来的列表上 放了一个隐藏显示的ReltionLayout 里面放了一些 选项 选择排序或过滤条件,这时在列表上面弹出显示这个ReltionLayout ,点击这个ReltionLayout 空白处 没有刚好点击上ReltionLayout里面的控件 经常会点击到下面的列表Items 里面的item 而触发其事件 如进入了详细页。
还有一种情况是:
<RelativeLayout>
<RelativeLayout android:id="@+id/Rel1" android:layout_width="match_parent"
android:layout_height="match_parent">
类别选择在Rel2下面, Rel2侧滑时看到 就像蘑菇街一样
我里面放了ExpandableListView 控件
</RelativeLayout>

<RelativeLayout android:id="@+id/Rel2" android:layout_width="match_parent"
android:layout_height="match_parent">
主页面, 触屏事件 侧滑
</RelativeLayout>
</RelativeLayout>
不清楚蘑菇街是怎么做的,他第一屏侧滑后就锁住了,那半边是不能再滚动和点击的。
而我上面的做法则出现第一习测滑后还会被一些事件影响到,就算我在另半屏Rel1中作触屏和滚动都会影响到Rel2。
我需要的是不影响,要怎么做才能达到不影响的效果。
网页中经常会做弹出一个遮照层来盖着下面的层,android 有没有类似的效果。
[最优解释]
用alertdialog,它自己会带遮罩
[其他解释]
感叹下adroid。。。。。。。。
[其他解释]
ReltionLayout的内容转到另外一个Activity中,把这个Activity设置成透明的,能不能满足你的要求呢!不知我表达的是否明确呢
[其他解释]
我再补充一点。重写有关触屏的事件,可以指定那些控件可以接收事件去处理,这块我学的不精,具体怎么做就不是很清楚了
[其他解释]

View view=findviewbyid(R.id.re1); //大小写自己改下...
view.setonclicklistener(null);
[其他解释]
Re2
clickable = "true"
[其他解释]

引用:
用alertdialog,它自己会带遮罩

alertdialog 不美观 很难做到自己想要的效果,或许是我不懂得重写。
[其他解释]
该回复于2012-12-09 16:35:31被管理员删除
[其他解释]
引用:
ReltionLayout的内容转到另外一个Activity中,把这个Activity设置成透明的,能不能满足你的要求呢!不知我表达的是否明确呢

呃,不明白,难道是想网页中的iframe一样?一个屏幕里面能同时显示两个Activity吗?
[其他解释]
引用:
我再补充一点。重写有关触屏的事件,可以指定那些控件可以接收事件去处理,这块我学的不精,具体怎么做就不是很清楚了

事件监听应该是针对相应的控件吧,听有绑定相应监听的才会执行监听器里面的程序,我觉得应该无需在监听器里面判断哪些控件,因为按道理是你触摸了哪个控件如果这个控件绑定了监听器则会执行监听器,无绑定则不执行。
最郁闷的是我发现事实并非如此,我上面放了两个ReltionLayout 一个显示主页面Rel2, 另一个显示一些类别菜单Rel1(一进入这个Activity时Rel1被Rel2遮住看不到)。Rel2上绑定了触屏事件监听,当向左滑时Rel2向左滑半屏,向右滑则恢复原样
/**
* 滑屏动画 触屏事件
* @author kong
*
*/
public class myOnTouchListener implements View.OnTouchListener
{
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
if(event.getAction()==MotionEvent.ACTION_DOWN)
{
containerX1 = event.getX();
}
else if(event.getAction()==MotionEvent.ACTION_MOVE)
{
containerX2 = event.getX();
}
else if(event.getAction()==MotionEvent.ACTION_UP)
{




//松开事件发生后执行代码的区域
if(containerX1>containerX2)
{
if(isClose)
{
isClose = false;
ScrollContainer(true);
}
}
else
{
if(!isClose)
{
isClose = true;
ScrollContainer(false);
}
}
}
return true;
}
}



具体滑屏动画方法代码ScrollContainer()有点长就不贴了。
功能基本上实现,出现的问题是当我将Rel2滑到左边时(只能看到半屏,而右边半屏显示下面Rel1的半屏) 而我在Rel1上作触屏动作竟然 Rel2监听到且Rel1上的一些点击动作无作用(Rel1里面的是一个自动扩展列表ExpandableListView),我不能理解的是为什么我在Rel1上作触屏动作却被Rel2监听到,Rel2不是被滑到另一边去了吗?难道它像网页一样加了个paddingRight 只是把它撑过去 右边的区域还是它的? 这些问题纠结了好久,度娘都不知道用什么关键字查,查了N久都没查到。一个人捉摸,没人带蛋痛啊!
[其他解释]
总算有点像了,用了很恶心的方法解决:将两个ReltionLayout 换下顺序,一进入Activity时隐藏类别Layout 并让他向右移了,再在触屏动作时给他移回来的动画。我标题的问题主要是为了解决这问题,有时遇到问题都不知道怎么表述。
我用这种恶心方法时又遇到一个问题:Rel1 的setVisibility(View.GONE) 不起作用,原因不明,我重新掉了个问题贴:http://bbs.csdn.net/topics/390311261
幸运的时Rel1 里面的ExpandableListView setVisibility(View.GONE)起作用。

读书人网 >Android

热点推荐