首页 > 解决方案 > 动态添加的 EditText 忽略主题

问题描述

我在 xml 中定义了一个 EditText,我想动态添加另一个,但动态添加的 EditText 不使用主题作为使用 xml 添加的 EditText。2 EditTexts 看起来不同,这是不希望的。看图片。

在此处输入图像描述

我在 API 28 以及物理设备 Samsung S8+ API 26 上进行了尝试。

知道如何解决这个问题吗?我看不出主题被忽略的原因,只要我知道我不能将主题应用于 EditText?

代码:

public class TActivity extends AppCompatActivity {

 private LinearLayout Layout;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.t);

  Layout = (LinearLayout) findViewById(R.id.Layout);

  EditText editText = new EditText(this);
  editText.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
  editText.setInputType(InputType.TYPE_CLASS_TEXT);
  editText.setEnabled(true);
  editText.setTextIsSelectable(true);
  Layout.addView(editText);

 }
}

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/Layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <EditText
        android:id="@+id/ThisWorks"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"/>
</LinearLayout>

<activity android:name=".UI.TActivity" android:windowSoftInputMode="adjustResize" android:theme="Theme.AppCompat.Light.NoActionBar" />

标签: android

解决方案


在我的应用程序中,我通过扩展 xml 布局文件来动态添加视图,并且主题没有问题。这是我使用的一段代码:

    View newView = LayoutInflater.from(context).inflate(R.layout.field, null);
    newView.setId(ViewIdGenerator.generateViewId()); //This is a custom method
    //that sets Id for a newly created view 
    //to find it later on for usage
    ConstraintLayout.LayoutParams params = new ConstraintLayout.LayoutParams(
            ConstraintLayout.LayoutParams.MATCH_PARENT,
            ConstraintLayout.LayoutParams.WRAP_CONTENT);
    newView.setLayoutParams(params);

因为我在这里创建了一个 ConstraintLayout 并且您需要一个 EditText,所以您可能应该创建一个以 EditText 作为其根的布局 xml 文件,如下所示,然后对其进行膨胀。

    <?xml version="1.0" encoding="utf-8"?>
    <EditText
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/ThisWorks"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine">
    </EditText>

我不确定它是否适合您,但您可能想尝试一下。


推荐阅读