2011年9月10日土曜日

任意の子Viewの属性を一括して変更する

任意の子Viewの属性を一括して変更する

親のViewGroup(例えば、LinearLayout)の下に、様々な種類(1種類でもよいが)のView(例えば、Button、TextView、LinearLayout等)が存在しており、それらのViewの属性を一括して変更する場合に使うsourceを掲載しておきます。

その1:
次のsourceでは、LinearLayoutに含まれる全部の子Viewの縦方向のpaddingの値の調整をしています。この技法を用いたsourceをレイアウト間の間隔を動的に変えるに公開しておきました。

        int i, iCount;
        LinearLayout ll;
        
        ll = (LinearLayout)findViewById(R.id.LLParent);
        iCount = ll.getChildCount();
        
        for(i=0; i<iCount; i++){
            View v;
            v = ll.getChildAt(i);
            v.setPadding(0, Padding, 0, Padding);
        }

その2:
次のsourceでは、LinearLayoutに含まれる子Viewの内、クラス名の末尾がButtonで終わるViewに対してpaddingを行います。
クラス名の末尾がButtonで終わるViewとは、ButtonやToggleButtonです。
この技法を使えば、複数の種類のViewが混在していたとしても、例えば、その中から"Layout"だけを取り出す、ということができます。

        int i, iCount;
        LinearLayout ll;
        
        ll = (LinearLayout)findViewById(R.id.LLParent);
        iCount = ll.getChildCount();
        
        for(i=0; i<iCount; i++){
            View v;
            String s;
            v = ll.getChildAt(i);
            s = v.getClass().getName();
            if(s.endsWith("Button")==true){
                v.setPadding(0, Padding, 0, Padding);
            }
        }

その3:
次のsourceでは、LinearLayoutに含まれる子Viewの内、paddingという名前のtagが付いているViewに対して、paddingを行います。
tagは識別子ですが、同一の値のtagを持つViewが複数存在しても良いです。
この技法を使うためには、事前に、任意のViewにtagを付けておかなければなりません。

        int i, iCount;
        LinearLayout ll;
        
        ll = (LinearLayout)findViewById(R.id.LLParent);
        iCount = ll.getChildCount();
        
        for(i=0; i<iCount; i++){
            View v;
            String s = "padding";
            v = ll.getChildAt(i);
            if(s.equals(v.getTag())==true){
                v.setPadding(0, Padding, 0, Padding);
            }
        }

0 件のコメント:

コメントを投稿