以编程方式更改视图 class

Change view class programmatically

我正在使用 com.rockerhieu.emojicon 库,它运行良好,但是当在带有长文本的回收视图上使用时,滚动速度变慢。出于这个原因,我想在必须显示表情符号时使用 EmojiconTextView。所以,我想在我的 xml 资源上有一个 TextView 元素,并在需要时以编程方式将其转换为 EmojiconTextView。有没有办法做到这一点?我考虑过使用 ViewStub,但我没有找到用 TextView/EmojiconTextView 元素对其进行膨胀的方法。

提前致谢。

尝试以编程方式创建 UI,而不是使用 XML 创建 UI 的声明方式。

考虑到您在 XML 中定义了 LinerLayout

<LinearLayout
   android:id="@+id/linearMain"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:orientation="vertical">
</LinearLayout>

然后您可以通过编程方式添加 EmojiconTextViewTextView

final LinearLayout lm = (LinearLayout) findViewById(R.id.linearMain);

LayoutParams lpView = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

if (mustShowEmoji) {
  EmojiconTextView etv = new EmojiconTextView(this);
  etv.setLayoutParams(lpView);
  etv.setText("TextView containing emoji");
  lm.addView(etv);        
} else {
  TextView tv = new TextView(this);
  tv.setLayoutParams(lpView);
  tv.setText("TextView");
  lm .addView(tv);        
}