Java 如何在布局的随机位置将textview放置在相对布局中?

Java 如何在布局的随机位置将textview放置在相对布局中?,java,android,design-patterns,Java,Android,Design Patterns,我面临的问题是如何将文本视图动态地放置在相对布局中的随机位置上。textview的总计数可以是1、3、4…或30。它取决于数组列表 我想在相对布局中随机放置文本视图。请引导我实现它。试试这个: TextView textView = findViewById(R.id.textView); Random random = new Random(); DisplayMetrics metrics = new DisplayMetrics(); getWindowMan

我面临的问题是如何将文本视图动态地放置在相对布局中的
随机位置上。textview的总计数可以是1、3、4…或30。它取决于数组列表

我想在相对布局中随机放置
文本视图
。请引导我实现它。

试试这个:

   TextView textView = findViewById(R.id.textView);
    Random random = new Random();
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);

    int random_width = random.nextInt(metrics.widthPixels - 
    textView.getWidth());
    int random_height = random.nextInt(metrics.heightPixels - 
    textView.getHeight());

    if (random_width > (metrics.widthPixels - 100)) {
        random_width -= 100;
    }

    if (random_height > (metrics.heightPixels - 200)) {
        random_height -= 200;
    }
    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    layoutParams.width = metrics.widthPixels;
    layoutParams.height = metrics.heightPixels;

    layoutParams.setMargins(random_width, random_height, 0, 0);
    textView.setLayoutParams(layoutParams);


    RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.MATCH_PARENT);
    layoutParams.width = metrics.widthPixels;
    layoutParams.height = metrics.heightPixels;


    layoutParams.setMargins(random_width, random_height, 0, 0);
    textView.setLayoutParams(layoutParams);
在xml中:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/mRelativeLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"       
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="HI"
        android:textColor="#ff9999" />


</RelativeLayout>

我建议您采取下一种方法:

RelativeLayout relativeLayout = findViewById(R.id.relativeLayout);
Random random = new Random();
int num_textViews= 10;
for (int i = 0; i < num_textViews; ++i) {
    TextView textView = new TextView(this);
    textView.setX(random.nextInt(relativeLayout.getMeasuredWidth()));
    textView.setY(-random.nextInt(relativeLayout.getMeasuredHeight()));
    relativeLayout.addView(textView);
}
RelativeLayout RelativeLayout=findViewById(R.id.RelativeLayout);
随机=新随机();
int num_textViews=10;
对于(int i=0;i
请向我们展示您迄今为止所做的工作。这与设计模式有何关系使用显示大小而不是仅仅使用相对物的测量宽度和高度肯定会在某个时候导致一些奇怪的错误。@Shadkirill我已经实现了这一点。但是由于:java.lang.IllegalArgumentException:n导致的像这样的
错误必须是正的
。我该如何解决这个问题?@Chirag Pragapati你应该在已经测量布局的情况下进行。因此,请尝试将代码移动到活动的onResume()方法。谢谢@Shadkirill,我已经实现了mohammadReza Abiri的回答。它正在工作,但有时文本视图显示在布局/屏幕之外。有时它相互重叠。你能帮我吗help@ChiragPrajapati尝试使用random.nextInt(relativeLayout.getMeasuredWidth())和-random.nextInt(relativeLayout.getMeasuredHeight())来解决第一个问题。为了解决第二个问题,您应该保存TextView的已生成位置,并检查新生成的位置是否与已生成的位置重叠。谢谢@mohammadReza Abiri,我已经实现了它。它正在工作,但有时文本视图显示在布局/屏幕之外。有时它相互重叠。你能帮忙吗。