android - 动态添加的 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" />
解决方案
在我的应用程序中,我通过扩展 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>
我不确定它是否适合您,但您可能想尝试一下。
推荐阅读
- delphi - 如何在 Pascal 中初始化和填充 TWideStringDynArray?
- java - 使用 mapr 集群提交 mapreduce 作业时遇到问题
- sqlite - 无法在 Windows 上通过 TDM-GCC 使用 cgo 编译 Go 应用程序
- javafx - 如何在arcGIS JAVA SDK中围绕指定航点创建1公里的圆圈或缓冲区?
- scikit-learn - 为什么 sklearn 的 kNN 分类器运行速度如此之快,而我的训练样本和测试样本的数量很大
- sql-server - 将 datetimeoffset 转换为 varchar
- instagram - instagram api 授权失败?
- android - Gradle 迁移:无法实例化应用程序 ClassNotFoundException。在路径上找不到类“应用程序”:DexPathList
- reactjs - 为什么我在反应引导程序中不使用正确的卡?
- ios - Siri Intent 请求访问令牌 OAUTH 令牌