给layout添加点击事件,怎么获取到真正点击的子控件对象

给layout添加点击事件,怎么获取到真正点击的子控件对象,第1张

void onClick(View view) {

    switch (viewgetId()) {

        case Ridhome:

            onBackPressed();

            break;

    }

}

难道不是有id判断是那个view被触发的吗

比如接着上篇 Android-View的事件分发及拦截机制简单流程先体验再研究(场景?疑问 具体?待续) ,小白现在要实现就是子View和父ViewGroup都响应点击事件。

1 单纯的都只是响应down事件

这个就很简单了 - 直接子View的public boolean onTouchEvent(MotionEvent event) 里面直接返回false就行了。也就是子控件响应了一次down后,接下来就交给父ViewGroup了(子View就啥几把也干不了了);

2 响应down和up事件,move啥的

我们知道子View如果onTouch里面返回了true,那么将会处理后续的move,up事件。而不再交给上层父ViewGroup。那父ViewGroup就没办法在Touch里面处理,所以我们只能放到dispatchTouchEvent或者onInterceptTouchEvent中处理这个down,up等事件:

比如dispatchTouchEvent中:

这样的情况就是父ViewGroup先执行点击事件,然后子View再执行。 如果您需要父ViewGroup晚点,可以延时执行啥的。

如果此时,子View的dispatchTouchEvent返回true - 表示拦截,不继续了

那么子View的所有的事件都不会响应了。其实也就是我们的一个事件先传递,touch再处理的树形图:

百度上拔个图来

简单记录下下而已,继续加深理解这是上一篇的续,还是上一篇啧啧后面是官方文档分析来着

MultiView 和 View 控件和制作出选项卡的效果 MultiView 控件是一组 View 控件的容器 使用它可定义一组 View 控件 其中每个 View 控件都包含子控件

如果要切换视图 可以使用控件的ID或者View控件的索引值 在 MultiView 控件中 一次只能将一个 View 控件定义为活动视图 如果某个 View 控件定义为活动视图 它所包含的子控件则会呈现到客户端 可以使用 ActiveViewIndex 属性或SetActiveView 方法定义活动视图 如果 ActiveViewIndex 属性为空 则 MultiView 控件不向客户端呈现任何内容 如果活动视图设置为MultiView 控件中不存在的 View 则会在运行时引发 ArgumentOutOfRangeException

一些常用的属性 方法

ActiveViewIndex属性 用于获取或设置当前被激活显示的View控件的索引值 默认值为- 表示没有View控件被激活

废话不多说 由于MultiView和View比较简单 我们一起来看以下例子吧

创建新的 ASP NET 网站项目

在 文件 菜单中 指向 新建 然后选择 网站

在 新建网站 对话框中 从 语言 下拉列表中选择 Visual C# 并选择 ASP NET 网站模板

在 位置 中 选择 >

layout为布局,布局里面可以放任何空间,获取空间可以用findViewById方法获取

android 获取某个布局控件 添加到另一个布局中

protected void onCreate(Bundle savedInstanceState) {

superonCreate(savedInstanceState);

setContentView(Rlayoutactivity_main);

LinearLayout relativeLayout = (LinearLayout) findViewById(Ridlayout456);

ImageView imgApple2 = new ImageView(this);

imgApple2setImageResource(Rdrawableic_launcher);

relativeLayoutaddView(imgApple2);

LayoutInflater factorys = LayoutInflaterfrom(MainActivitythis);

final View textEntryView = factorysinflate(Rlayoutlayout1, null);

// LinearLayout linearLayout = (LinearLayout) textEntryView

// findViewById(Ridlayout1);

// relativeLayoutaddView(linearLayout);

EditText editText1 = (EditText) textEntryView

findViewById(RideditText1);

relativeLayoutaddView(editText1);

以上就是关于给layout添加点击事件,怎么获取到真正点击的子控件对象全部的内容,包括:给layout添加点击事件,怎么获取到真正点击的子控件对象、Android-View的事件分发及拦截-父控件和子控件都处理触摸事件的方式、ASP.NET服务器控件MultiView和View等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9575131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存