如何从 Android 中的特定视图创建克隆?

Posted

技术标签:

【中文标题】如何从 Android 中的特定视图创建克隆?【英文标题】:How to create a clone from specific a view in Android? 【发布时间】:2021-11-21 06:20:02 【问题描述】:

如何克隆布局中特定视图的属性?

我有这个观点

<com.google.android.material.textview.MaterialTextView
    android:id="@+id/fragment_login_main_text"
    android:layout_
    android:layout_
    android:layout_margin="25dp"
    android:fontFamily="@font/font_en_medium"
    android:gravity="center"
    android:text="@string/fragment_login_main_text"
    android:textColor="@color/fragment_login_text1_main_text"
    android:textSize="22.5sp" />

我想创建这个视图的克隆,我就是这样做的

MaterialTextView materialTextView = fragmentLoginBinding.fragmentLoginMainText;
materialTextView.setId(View.NO_ID);
fragmentLoginBinding.getRoot().addView(materialTextView);

但我得到了这个错误

Caused by: java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

所以我想知道是否有任何方法可以从该视图创建克隆,而无需像这样手动进行

MaterialTextView materialTextView = new MaterialTextView(requireActivity());
materialTextView.setText(fragmentLoginBinding.fragmentLoginMainText.getText());
materialTextView.setTypeface(fragmentLoginBinding.fragmentLoginMainText.getTypeface());
materialTextView.setTextSize(fragmentLoginBinding.fragmentLoginMainText.getTextSize());
etc...
fragmentLoginBinding.getRoot().addView(materialTextView);

【问题讨论】:

【参考方案1】:

您不会克隆现有视图,系统不会那样工作。但是,如果视图是 xml 格式,您可以扩充一个新副本。 LayoutInflater.from(context).inflate(layoutId, fragmentLoginBinding.getRoot()) 会将其膨胀并将其添加到该父级。如果您不想膨胀整个 xml 文件,那么您可能需要将其拆分为自己的 xml 文件,并使用 &lt;include&gt; 标签将其包含到另一个中

【讨论】:

我不知道您在该链接中指的是什么。但就像我说的那样,克隆不是系统的一部分。通货膨胀。

以上是关于如何从 Android 中的特定视图创建克隆?的主要内容,如果未能解决你的问题,请参考以下文章

如何将按钮放置在图像视图中的特定坐标处

如何将值从活动传递到 Android Studio 中的类?

Android如何从同一个数组中仅显示列表视图中的某些项目?

如何克隆 git bitbucket 中的特定分支

如何根据 android 视图中的可见内容调整大小?

如何在特定的imageView上上传特定的图像点击来自android中的画廊和相机