为什么我以编程方式创建的按钮的样式不同?
Why is the style of my programmatically created button different?
从 Android Studio 中的一个空 Activity 新项目开始,我在 activity_main.xml
中添加了一个带有单个按钮的线性布局:
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Demo01" />
</LinearLayout>
然后在我的 MainActivity
中,我以编程方式添加第二个按钮:
val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
val button = Button(this)
button.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT
)
button.text = "Demo 01"
buttonsLayout.addView(button)
最后,当我 运行 这个应用程序时,我看到了这个:
第一个按钮和第二个按钮的样式似乎不同。
它们为什么不同?此外,以编程方式创建新视图的正确方法是什么,以便以编程方式创建的视图与其 xml 布局副本具有相同的样式?
它们不同,因为您使用的是 Theme.MaterialComponents.*
主题。
对于这个主题,布局中定义的 Button
是由 MaterialButton
.
定义的 replaced at runtime
要使用相同的按钮,您必须使用:
val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
val button = MaterialButton(this)
//...
button.text = "Demo01"
buttonsLayout.addView(button)
从 Android Studio 中的一个空 Activity 新项目开始,我在 activity_main.xml
中添加了一个带有单个按钮的线性布局:
<LinearLayout
android:id="@+id/buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Demo01" />
</LinearLayout>
然后在我的 MainActivity
中,我以编程方式添加第二个按钮:
val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
val button = Button(this)
button.layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ActionBar.LayoutParams.WRAP_CONTENT
)
button.text = "Demo 01"
buttonsLayout.addView(button)
最后,当我 运行 这个应用程序时,我看到了这个:
第一个按钮和第二个按钮的样式似乎不同。
它们为什么不同?此外,以编程方式创建新视图的正确方法是什么,以便以编程方式创建的视图与其 xml 布局副本具有相同的样式?
它们不同,因为您使用的是 Theme.MaterialComponents.*
主题。
对于这个主题,布局中定义的 Button
是由 MaterialButton
.
要使用相同的按钮,您必须使用:
val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
val button = MaterialButton(this)
//...
button.text = "Demo01"
buttonsLayout.addView(button)