腾讯X5去分享 缓存 简单分析

此方法只适用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,而现在我们对没有资源名的情况下自然是非常难找,所以我们需要把当前窗口的所有视图取出来(当然会担心耗时的问题,所以后面会把这个方法去掉)

这里就抄下百度的方法

/**
          * @note 获取该activity所有view
          * @author liuh
          * */
         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页面不会产生大的变化的情况下,请谨慎使用

 

后记

楼主能力有限,未能实现从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文件,最后只能不了了之,凑合着用了

这两个方法就留给大家去尝试吧,如果你有好的方法请留言,给遇到麻烦的网友和我这个菜鸡一点方法

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值