代码之家  ›  专栏  ›  技术社区  ›  Freelancer

Count元素并获取资源中项的属性

  •  1
  • Freelancer  · 技术社区  · 7 年前

    我有一个资源文件

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <IDs name="IDs">
            <item type="id" name="bt_A"/>
            <item type="id" name="bt_B"/>
            <item type="id" name="bt_C"/>
            <item type="id" name="bt_D"/>
        </IDs>
    </resources>
    

    如何计算ID中的项目数。这意味着结果将是4。

    名称 逐项循环。我可以进入R。同上,右。同上... 但我无法想象如何得到一切 名称

    for(int i=0; i<R.IDs.count; i++){
       Button bt = new Button(getBaseContext());
       bt.setId(R.IDs[i]);
    }
    

    我不想再创建一个静态数组来存储所有id。我只想使用我资源中的所有id。

    编辑问题 如果我的资源文件是:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer name="length">4</integer>
        <item type="id" name="bt_1"/>
        <item type="id" name="bt_2"/>
        <item type="id" name="bt_3"/>
        <item type="id" name="bt_4"/>
        <string name="label_1">Ok</string>
        <string name="label_2">Cancel</string>
        <string name="label_3">Exit</string>
        <string name="label_4">Stop</string>
    </resources>
    

    我可以通过以下方式获取id,但无法获取字符串值!我该怎么办?

    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            GridLayout root = new GridLayout(getBaseContext());
            root.setBackgroundColor(Color.GRAY);
            root.setRowCount(2);
            root.setColumnCount(2);
    
            int count = getResources().getInteger(R.integer.length);
            int[] ids = new int[count];
            String[] labels = new String[count];
            for(int i=0; i<count; i++) {
                ids[i] = getResources().getIdentifier("bt_" + (i+1), "id", getPackageName());
                labels[i] = getResources().getString(getResources().getIdentifier("label_"+(i+1),"string", getPackageName()));//Wrong, just trace true/false on button
            }
            Log.d("IDs", ids.toString());
            for(int i=0; i<count;i++){
                Button bt = new Button(getBaseContext());
                bt.setId(ids[i]);
                bt.setText(ids[i]);
                root.addView(bt, i);
            }
    
            setContentView(root);
        }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Pavneet_Singh    7 年前

    没有自动生成id数组的方法(android不处理内部id,已经尝试过了),不过根据您的需求,也有其他方法

    <integer name="length">4</integer>
    <item type="id" name="bt_A"/>
    <item type="id" name="bt_B"/>
    <item type="id" name="bt_C"/>
    <item type="id" name="bt_D"/>
    

    然后在java中使用循环,将字符转换为ascii,得到如下值

    for(int i=65; i< 65+getResources().getInteger(R.integer.length); i++){
        Button bt = new Button(getBaseContext());
        bt.setId(getResources().getIdentifier("bt_"+(char)i,"id",getPackageName()));
    }
    
        2
  •  1
  •   Freelancer    7 年前

    我解决了我的问题。

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <integer name="length">4</integer>
        <item type="id" name="bt_1"/>
        <item type="id" name="bt_2"/>
        <item type="id" name="bt_3"/>
        <item type="id" name="bt_4"/>
    
        <string-array name="labels">
            <item name="label_1">Ok</item>
            <item name="label_2">Cancel</item>
            <item name="label_3">Exit</item>
            <item name="label_4">Stop</item>
        </string-array>
    </resources>
    

    package android.calculator;
    
    import android.graphics.Color;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.widget.Button;
    import android.widget.GridLayout;
    
    public class ConstraintActivity extends AppCompatActivity{
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            GridLayout root = new GridLayout(getBaseContext());
            GridLayout.LayoutParams params = new GridLayout.LayoutParams();
            params.setMargins(0, 0, 0,0);
            root.setBackgroundColor(Color.GRAY);
            root.setRowCount(2);
            root.setColumnCount(2);
            root.setAlignmentMode(GridLayout.ALIGN_MARGINS);
            root.setLayoutParams(params);
    
            int count = getResources().getInteger(R.integer.length);
            int[] ids = new int[count];
            String[] labels = getResources().getStringArray(R.array.labels);
            for(int i=0; i<count; i++) {
                ids[i] = getResources().getIdentifier("bt_" + (i+1), "id", getPackageName());
            }
    
            Log.d("IDs", ids.toString());
            for(int i=0; i<count;i++){
                Button bt = new Button(getBaseContext());
                bt.setId(ids[i]);
                bt.setText(labels[i]);
                root.addView(bt, i);
            }
    
            setContentView(root);
        }
    }
    

    enter image description here