文本大小和不同的安卓屏幕尺寸

131

我知道这个问题已经讨论了1000次,但我无法调整不同屏幕大小的文本大小。我尝试在我的自定义样式中使用“sp”作为大小单位:

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    ...
    <item name="android:textSize">30sp</item>
    ...
</style>

在2.7英寸QVGA屏幕上看起来还可以:

2.7QVGA 30sp

但在7英寸WSVGA屏幕上看起来像这样:

7in WSVGA 30sp

我尝试使用同样的结果,无论是'sp'还是'dp'。

请问如何使得这些按钮在任何屏幕上看起来都一样?

完整的自定义按钮样式

<style name="CustumButtonStyle" parent="@android:style/Widget.Button">
    <item name="android:background">@drawable/custom_button</item>
    <item name="android:layout_width">fill_parent</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:layout_margin">3dp</item>
    <item name="android:textColor">#ffffff</item>
    <item name="android:gravity">center</item>
    <item name="android:textSize">30sp</item>
    <item name="android:textStyle">bold</item>
    <item name="android:shadowColor">#000000</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
    <item name="android:shadowRadius">2</item>
</style>

而在我的应用主题中,我有以下内容:

<item name="android:buttonStyle">@style/CustumButtonStyle</item>

这是我的布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:background="@drawable/grid"
android:gravity="center"
android:orientation="vertical" android:layout_height="fill_parent">

<Button
    android:id="@+id/buttonContinue"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/continue_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/buttonNewGame"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonContinue"
    android:layout_alignRight="@+id/buttonContinue"
    android:layout_below="@+id/buttonContinue"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/new_game" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>



<Button
    android:id="@+id/ButtonAbout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/buttonNewGame"
    android:layout_alignRight="@+id/buttonNewGame"
    android:layout_below="@+id/buttonNewGame"
    android:layout_gravity="center"
    android:gravity="center"
    android:text="@string/about" android:layout_marginTop="3dp" android:layout_marginBottom="3dp"/>


在您的屏幕上,它们看起来相同。请确保您的查看器缩放比例为100%。 - Dmitry Zaytsev
你可以在这里找到答案:https://dev59.com/K2Qn5IYBdhLWcg3wmILY#16910589 - Bhavesh Jethani
12个回答

-1

正如@espinchi所述,从3.2(API级别13)开始,大小组已被弃用。屏幕尺寸范围是未来的首选方法。


-3

不要硬编码大小。

为了适应新的屏幕分辨率 - 最佳做法是在布局中放置虚拟TextView来获取textSize:

<TextView
        android:id="@+id/dummyTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:text="TextView" />

例如,在您的代码中:

TextView testTextView = (TextView) rootView.findViewById(R.id.dummyTextView);
float textSize = testTextView.getTextSize();

保持 textSize 作为一个参考,你可以通过计算来添加常量或百分比大小。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接