Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 Android:以编程方式读取LayoutParams的视图ID_Java_Android - Fatal编程技术网

Java Android:以编程方式读取LayoutParams的视图ID

Java Android:以编程方式读取LayoutParams的视图ID,java,android,Java,Android,我试图做的是以编程方式创建一行带有约束视图的按钮。 我正在创建两个按钮,我希望它们彼此相邻,而不必对.xml文件做任何操作,因为按钮的数量可能因用户而异 我想使用类似(此代码是活动的一部分): 设置两个params2值不起作用,因为显然我无法真正访问button1的ID。 解决这个问题的有效办法是什么? 我读过并尝试过的东西: 使用标签而不是ID 使用所有已创建按钮的ArrayList作为活动的私有成员访问按钮 使用setId()为视图提供一些随机id(我已经选择) 使用类似的方法是可行的,

我试图做的是以编程方式创建一行带有约束视图的按钮。 我正在创建两个按钮,我希望它们彼此相邻,而不必对.xml文件做任何操作,因为按钮的数量可能因用户而异

我想使用类似(此代码是活动的一部分):

设置两个params2值不起作用,因为显然我无法真正访问button1的ID。 解决这个问题的有效办法是什么? 我读过并尝试过的东西:

  • 使用标签而不是ID
  • 使用所有已创建按钮的ArrayList作为活动的私有成员访问按钮
  • 使用setId()为视图提供一些随机id(我已经选择)
使用类似的方法是可行的,因为我已经在xml文件中预定义了btn3:

params2.topToTop = layout.findViewById(R.id.btn3).getId();
params2.leftToRight = layout.findViewById(R.id.btn3).getId();
但在所有其他情况下,我的btn2只是降落在btn1的顶部(或者更确切地说是在布局的左上角)


提前谢谢你

您可以使用以下方法以编程方式生成视图id:

private static final AtomicInteger nextGeneratedId = new AtomicInteger(10000);
public static int generateViewId() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        for (;;) {
            final int result = nextGeneratedId.get();
            // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
            int newValue = result + 1;
            if (newValue > 0x00FFFFFF) newValue = 10000; // Roll over to 10000, not 0.
            if (nextGeneratedId.compareAndSet(result, newValue)) {
                return result;
            }
        }
    } else {
        return View.generateViewId();
    }
}
private static final AtomicInteger nextGeneratedId=new AtomicInteger(10000);
公共静态int generateViewId(){
if(Build.VERSION.SDK\u INT0x00FFFFFF)newValue=10000;//滚动到10000,而不是0。
if(nextGenerateId.compareAndSet(结果,新值)){
返回结果;
}
}
}否则{
return View.generateView();
}
}

为您创建的按钮调用
.setId(generateId)

您需要为创建的按钮设置一个id,如btn1.setId(1);btn2.setId(2)或您想要的任何号码
private static final AtomicInteger nextGeneratedId = new AtomicInteger(10000);
public static int generateViewId() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
        for (;;) {
            final int result = nextGeneratedId.get();
            // aapt-generated IDs have the high byte nonzero; clamp to the range under that.
            int newValue = result + 1;
            if (newValue > 0x00FFFFFF) newValue = 10000; // Roll over to 10000, not 0.
            if (nextGeneratedId.compareAndSet(result, newValue)) {
                return result;
            }
        }
    } else {
        return View.generateViewId();
    }
}