【问题标题】:Orientation change increases TextView's text size方向改变增加了 TextView 的文本大小
【发布时间】:2017-12-23 22:16:17
【问题描述】:

我想将当前文本大小保存为SharedPreferences,并在屏幕方向更改时将其重新设置。

我使用此代码,但是当我更改屏幕方向时,它会使textSize 变大...

package com.example.zz;

import android.app.ActionBar;
import android.app.Activity;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView;

public class MainActivity extends Activity {
    TextView text;
    float size;
    ActionBar actionBar;
    private final String TEXT_SIZE = "textsize";
    final String MyPref = "preference";
    SharedPreferences settings;
    Editor editor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        text = (TextView) findViewById(R.id.textView1);

        settings = this.getSharedPreferences(MyPref, 0);
        text.setTextSize(settings.getFloat(TEXT_SIZE, 0));
        editor = settings.edit();
    }

    public void sizeUp(MenuItem item) {
        size = text.getTextSize();
        text.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) (size + 5));

    }

    public void sizeDown(MenuItem item) {
        size = text.getTextSize();
        text.setTextSize(TypedValue.COMPLEX_UNIT_PX, (float) (size - 5));

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.actionbar, menu);
        return true;
    }

    @Override
    protected void onStop() {
        super.onStop();

        SharedPreferences.Editor editor = settings.edit();
        editor.putFloat(TEXT_SIZE, text.getTextSize());

        editor.commit();
    }

}

谢谢。

【问题讨论】:

    标签: android sharedpreferences textview text-size


    【解决方案1】:

    方法getTextSize()像素 为单位返回文本大小,但setTextSize()sp 为单位处理大小。这就是为什么您的文字看起来更大的原因。在setTextSize() 中使用之前,您应该缩放大小。你可以这样做:

    SharedPreferences.Editor editor = settings.edit();
    editor.putFloat(TEXT_SIZE, text.getTextSize()/getResources().getDisplayMetrics().scaledDensity); // put text size in sp
    editor.commit();
    

    【讨论】:

      【解决方案2】:

      试试这个:

        @Override
      protected void onSaveInstanceState(Bundle outState) {
          super.onSaveInstanceState(outState);
          if (picUri != null) {
          // here you store string    
              outState.putString("cameraImageUri", picUri.toString());
      
      
          }
      
      
      }
      
      @Override
      protected void onRestoreInstanceState(Bundle savedInstanceState) {
          super.onRestoreInstanceState(savedInstanceState);
          if (savedInstanceState.containsKey("cameraImageUri")) {
                 // here you get string again
              picUri = Uri.parse(savedInstanceState.getString("cameraImageUri"));
          }
      
      
      }
      

      【讨论】:

        【解决方案3】:

        我没有在这段代码中找到 onConfigure chnage 方法,

        你必须实现这个方法,并在这个方法中改变文本大小。

            @Override
        public void onConfigurationChanged(Configuration newConfig) {
            // TODO Auto-generated method stub
            super.onConfigurationChanged(newConfig);
            }
        

        【讨论】:

          【解决方案4】:

          试试这个:

          @Override
              protected void onStop() {
                  super.onStop();
          
                  SharedPreferences settings = getSharedPreferences(MyPref, 0);
                  SharedPreferences.Editor editor = settings.edit();
                  editor.putFloat(TEXT_SIZE, text.getTextSize());
          
                  editor.commit();
              }
          

          【讨论】:

            【解决方案5】:

            您可以为此使用样式,而不是通过代码执行此操作。

            首先,在styles.xml 中设置TextView 的样式以及纵向模式所需的文本大小。例如:

            <style name="MyTextView">
               <item name="android:textSize">18sp</item>
            </style>
            

            然后,在res文件夹中创建一个values-land文件夹,并在该文件夹中放一个styles.xml文件,并创建一个同名但文本大小值不同的样式:

            <style name="MyTextView">
               <item name="android:textSize">24sp</item>
            </style>
            

            最后,将此样式应用于布局中的TextView,文本大小将根据手机方向自动更改。额外的好处是,以这种方式维护/更改视图的外观非常容易。

            编辑:将 dp 中的 textsize 更改为 sp

            【讨论】:

              猜你喜欢
              • 2011-06-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-02
              • 1970-01-01
              • 1970-01-01
              • 2019-02-08
              相关资源
              最近更新 更多