Android:XML按钮和以编程方式创建的按钮具有略微不同的字体粗细(具有相同的属性)

时间:2017-12-05 00:30:02

标签: java android xml layout fonts

我在ScrollView中有一个带有多个按钮的应用程序,我在Activity开始后以编程方式添加更多按钮(自定义用户按钮)。

所有按钮都具有相同的样式和属性,但在屏幕上以编程方式创建的按钮具有稍微粗略的文本。

我在布局检查器中检查了它们,它们对getTextSize(20),getTypefaceStyle(NORMAL),height,width,styles等属性都有相同的值。

这些属性的相同值会导致大胆的不同吗?

一个XML按钮的示例:

            <Button
            android:id="@+id/button_autre"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/background_selector2o"
            android:text="Bonbons"
            android:textAppearance="@style/TextAppearance.AppCompat"
            android:textStyle="normal"
            android:textAllCaps="false"
            android:textColor="#ffffff"
            android:textSize="20sp"
            android:layout_marginTop="20dp"
            />

创建一个Button的示例:

        LinearLayout layout = (LinearLayout) view.findViewById(R.id.buttons_container);

        LinearLayout.LayoutParams layoutparams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
        layoutparams.setMargins(0, px, 0, 0); // px calculated to be 20dp

        ContextThemeWrapper ndfContext = new ContextThemeWrapper(getActivity(), R.style.button_style_xml);
        Button addbutton = new Button(ndfContext);
        addbutton.setLayoutParams(layoutparams);
        addbutton.setText("Bonbons");
        addbutton.setBackgroundResource(R.drawable.background_selector2o);
        layout.addView(addbutton);

button_style_xml的内容:

<resources>
    <style name="ndftype_style" parent="AppTheme.NoActionBar">
        <item name="android:background">@drawable/background_selector2o</item>
        <item name="android:textAppearance">@style/TextAppearance.AppCompat</item>
        <item name="android:textColor">#ffffff</item>
        <item name="android:textSize">20sp</item>
        <item name="android:layout_marginTop">20dp</item>
        <item name="android:textAllCaps">false</item>
        <item name="android:textStyle">normal</item>
    </style>
</resources>

结果:screenshot of app

1 个答案:

答案 0 :(得分:0)

通常情况下,我在撰写问题时得到了一个想法,感谢Canary Effect。

尽管所有按钮都具有相同的样式,并且没有任何字体分配给它们,但似乎Android将两种不同的默认字体归因于这两种类型。我不确定为什么会这样。

添加

<item name="android:fontFamily">sans-serif</item>

在我以编程方式创建的按钮上解决了这个问题。 您可能还想将其添加到XML按钮以确保安全。

如果您的目标是API级别&lt; 16,在所有按钮上运行以下应该可以工作:

button.setTypeface(Typeface.DEFAULT);