遍历view

package com.h.ad;

import android.app.Dialog;
import android.content.Context;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class DialogTest extends Dialog {
    public DialogTest(@NonNull Context context) {
        super(context);
    }



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(
                getWindow().getContext().getResources()
                        .getIdentifier("dialogtest", "layout", getWindow().getContext().getPackageName()));


        getWindow().getDecorView().post(new Runnable() {

            @Override
            public void run() {


                List<View> listview=getAllChildViews(getWindow().getDecorView());
                for (int i=0;i<listview.size();i++){
//            System.out.println("DialogTest:"+listview.get(i));

                    View view=listview.get(i);

//                    System.out.println("getAttributeSourceResourceMap:"+view.getAttributeSourceResourceMap().values());
//                    Map<Integer, Integer> getAttributeSourceResourceMap=view.getAttributeSourceResourceMap();
//                    for(Map.Entry<Integer,Integer> entry : getAttributeSourceResourceMap.entrySet()){
//                        System.out.println("getAttributeSourceResourceMap key:"+entry.getKey());
//                        System.out.println("getAttributeSourceResourceMap value:"+entry.getValue());
//                    }


                    if (view.getClass().isAssignableFrom(LinearLayout.class) ){
                        log("-----LinearLayout----");
                        LinearLayout linearLayout= (LinearLayout) view;
//                        linearLayout.getAttributeSourceResourceMap();

                    }else if (view.getClass().isAssignableFrom(RelativeLayout.class)){
                        log("-----RelativeLayout----");
                    }else if(view.getClass().isAssignableFrom(TextView.class)){
                        log("-----TextView----");
                        TextView textView= (TextView) view;
                        textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getSize(textView.getTextSize()));

                    }else if(view.getClass().isAssignableFrom(Button.class)){
                        Button button= (Button) view;
                        log("-----Button----");
                    }

                    ViewGroup.LayoutParams lp=view.getLayoutParams();


                    lp.width= (int) getSize(view.getWidth());
                    lp.height= (int) getSize(view.getHeight());



                    view.setLayoutParams(lp);

                    log(""+view.getWidth());
                }



            }
        });

    }

    public void log(Object data){
        System.out.println("DialogTest:"+data);
    }

    public float getSize(float size){
        float designWidth=1080.0f;
//        DisplayMetrics dm = new DisplayMetrics();
//		System.out.println(context);
        DisplayMetrics dm = getWindow().getContext().getResources().getDisplayMetrics();
        int width=dm.widthPixels;
        return size/designWidth*width;
    }

    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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值