Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 资源中项目的Count元素和Get属性_Java_Android - Fatal编程技术网

Java 资源中项目的Count元素和Get属性

Java 资源中项目的Count元素和Get属性,java,android,Java,Android,我有一个资源文件 <?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 ty

我有一个资源文件

<?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.id.bt_A,R.id.bt_B。。。但我无法想象如何通过循环获得所有名称。类似于这样的内容(此代码无法运行,请参见插图):


for(int i=0;i没有自动生成ID数组的功能(android不处理内部ID,已尝试过),不过根据您的要求,还有一种替代方法

将长度和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"/>
4
然后在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()));
}
for(inti=65;i<65+getResources().getInteger(R.integer.length);i++){
按钮bt=新按钮(getBaseContext());
bt.setId(getResources().getIdentifier(“bt_+(char)i,“id”,getPackageName());
}
我解决了我的问题

<?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>

4.
好啊
取消
出口
停止
和Java代码

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);
    }
}
package.android.calculator;
导入android.graphics.Color;
导入android.os.Bundle;
导入android.support.v7.app.AppActivity;
导入android.util.Log;
导入android.widget.Button;
导入android.widget.GridLayout;
公共类约束性扩展了AppCompatActivity{
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
GridLayout root=新的GridLayout(getBaseContext());
GridLayout.LayoutParams params=新的GridLayout.LayoutParams();
参数设置边距(0,0,0,0);
根.立根基色(颜色.灰色);
root.setRowCount(2);
root.setColumnCount(2);
setAlignmentMode(GridLayout.ALIGN_边距);
root.setLayoutParams(params);
int count=getResources().getInteger(R.integer.length);
int[]ids=新的int[count];
String[]labels=getResources().getStringArray(R.array.labels);

对于(int i=0;i可能重复谢谢!如果我想获取item元素的属性值,如何获取?
期望值为OK没有“乐于帮助”、“乐于编码”之类的内容~我已经编辑了我的问题,请您回答。我真的需要将ID和标签从资源加载到按钮。不过,我很高兴您解决了这个问题一次添加所有需求会很好,这样回答者就有机会一次解决问题,修改问题只应该是为了澄清需求,尽管您可以添加新需求,尽管这不是理想的、令人满意的编码
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()));
}
<?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);
    }
}