此方法只适用webView页面不会产生大的变化的情况下,请酌情谨慎使用
首先在分享的按钮一般只在横屏的时候出现,目前网上的说法都是说用标准横屏,但是作为一个标准懒人当然是用现成的X5横屏,所以我们要在横屏的时候调用我们设置分享隐藏的方法,即onConfigurationChanged调用时
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
orientation = 0;
getAllChildViews(); //横屏
} else orientation = 1; //竖屏
}
getAllChildViews();就是我们的隐藏方法
这里说下思路
首先就是我们需要找到需要隐藏的ImageView的id,而现在我们对没有资源名的情况下自然是非常难找,所以我们需要把当前窗口的所有视图取出来(当然会担心耗时的问题,所以后面会把这个方法去掉)
这里就抄下百度的方法
public List<View> getAllChildViews() {
View view = this.getWindow().getDecorView();
return getAllChildViews(view);
}
private List<View> getAllChildViews(View view) {
List<View> allchildren = new ArrayList<View>();
if (view instanceof ViewGroup) {
ViewGroup vp = (ViewGroup) view;
for (int i = 0; i < vp.getChildCount(); i++) {
View viewchild = vp.getChildAt(i);
allchildren.add(viewchild);
allchildren.addAll(getAllChildViews(viewchild));
}
}
return allchildren;
}
在拿到所有view后,我们去遍历所有视图,判断是否是Imageview,,来找到我们需要的imageview
int i =0;
for (View cview : allchildren){
if (cview instanceof ImageView
&& i > allchildren.size()/2
&& i< allchildren.size()
){
cview.setVisibility(View.INVISIBLE);
}
i++;
}
在依次对比几次后我们就可以定位到我们需要的imagview了
在拿到view后,我们就可以拿到view的id了,然后回到开头横屏方法那里直接从主视图里findbyid,然后setVisibility即可,然后取消掉我们遍历的方法,提升效率
View view = this.getWindow().getDecorView();
View view2 = view.findViewById(35);
if (view2!=null)
view2.setVisibility(View.INVISIBLE);
此方法只适用webView页面不会产生大的变化的情况下,请谨慎使用
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL9MmaNJTQq5kMNRkTxkkMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZwpmLyIzMyUTOygTM1IjMxgTMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
后记
楼主能力有限,未能实现从id找到资源名的方法
public void geResId() {
Field[] f;
try {
f = R.id.class.getDeclaredFields();
for (Field id :f){
Log.e("动态id","name:"+id.getName()+"----"+id.getInt(null) );
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
之后用反射去动态查找R.id.class也未找到我找到的id,通过
String str = getApplicationContext().getResources().getResourceName(view2.getId());
从项目R文件未找到资源,感觉是包的问题,可能要到X5的包下去找,但是X5的jar文件并没有R文件,最后只能不了了之,凑合着用了
这两个方法就留给大家去尝试吧,如果你有好的方法请留言,给遇到麻烦的网友和我这个菜鸡一点方法