Android 通过反射 getDeclaredField 设置按钮的监听事件
使用阿里云的UI播放器,全屏放大后点击 “< ” 返回按钮会缩小会小屏播放,再点击一次才会结束当前activity
进入布局AliyunVodPlayerView看到的返回按钮相关的代码是
private com.aliyun.vodplayerview.c.a.a d;
this.d.setOnBackClickListener(new com.aliyun.vodplayerview.c.a.a.a() { public void onClick() { if(AliyunVodPlayerView.this.p == AliyunScreenMode.Full) { AliyunVodPlayerView.this.changeScreenMode(AliyunScreenMode.Small); } else if(AliyunVodPlayerView.this.p == AliyunScreenMode.Small) { Context context = AliyunVodPlayerView.this.getContext(); if(context instanceof Activity) { ((Activity)context).finish(); } } } }); 全屏的情况下点击返回按钮先变回小屏模式,再次点击才会结束。 GG,我想要的是点击返回按钮后直接结束当前activity,只通过放大缩小按钮进行大小屏缩放 com.aliyun.vodplayerview.c.a.a d是private ,不能直接修改监听事件。 不过类 com.aliyun.vodplayerview.c.a.a 的监听事件方法
private a.a K;
public void setOnBackClickListener(a.a l) { this.K = l; } 有搞头 通过使用java的反射设置按钮的监听事件 1.从AliyunVodPlayerView 获取实例 com.aliyun.vodplayerview.c.a.a d 2.从 com.aliyun.vodplayerview.c.a.a 获取监听实例com.aliyun.vodplayerview.c.a.a.a K 3.设置d 的setOnBackClickListener 监听事件
try { Field field = AliyunVodPlayerView.class.getDeclaredField("d"); //获取AliyunVodPlayerView私有属性字段 field.setAccessible(true); //成员变量d为private,故必须进行此操作 Object d = field.get(mAliyunVodPlayerView); Class infoClazz = Class.forName("com.aliyun.vodplayerview.c.a.a"); Field listenerField = infoClazz.getDeclaredField("K"); //获取返回按钮的类私有属性字段 监听事件 setOnBackClickListener(a.a l) listenerField.setAccessible(true); listenerField.set(d, new com.aliyun.vodplayerview.c.a.a.a() { @Override public void onClick() { finish(); } }); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); }
这样点击返回"<"就直接结束当前activity