如果字体大小设置为小,则按钮标签会被剪裁。我能做些什么呢?

时间:2014-01-08 12:53:50

标签: android android-layout android-ui

Android系统设置中有字体设置。我已经使用从默认Normal到Huge的所有选项测试了我的布局,但是我没有想到有人会使用Small。事实证明,有人这样做。

我的布局使用样式,而样式的某些维度受限于某些spdp值。为了平衡所有屏幕和字体大小的值,需要花费大量的试验和错误,我真的不想再从头开始重新调整它。我的应用程序有没有办法忽略字体大小设置?有没有办法对Android说我不希望应用程序受小于普通的选项的影响?

1 个答案:

答案 0 :(得分:1)

以下有点脏,但是在Nexus 5(Android 4.4.2)上工作:

<强>的AndroidManifest.xml

<uses-sdk
    android:minSdkVersion="10"
    android:targetSdkVersion="19" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="MainActivity"
        android:label="@string/app_name"
        android:configChanges="fontScale" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

<强> MainActivity.java

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Make sure to do this before setContentView()
        Configuration currentConfig = getResources().getConfiguration();
        if (currentConfig.fontScale < 1.0f) {
            currentConfig.fontScale = 1.0f;
            getResources().updateConfiguration(currentConfig, null);
        }

        setContentView(R.layout.activity_main);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        if (newConfig.fontScale < 1.0f) {
            newConfig.fontScale = 1.0f;
        }
        getResources().updateConfiguration(newConfig, null);

        // Restart to apply the new changes
        AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
        am.set(AlarmManager.RTC_WAKEUP,
                Calendar.getInstance().getTimeInMillis() + 1000, // one second
                PendingIntent.getActivity(this, 0, getIntent(), PendingIntent.FLAG_ONE_SHOT
                        | PendingIntent.FLAG_CANCEL_CURRENT));
        finish();
    }
}

希望这有帮助。

如果需要解释上述内容,请与我们联系。