Android 如何在运行时动态更改字体大小?

Android 如何在运行时动态更改字体大小?,android,android-layout,android-studio,android-spinner,Android,Android Layout,Android Studio,Android Spinner,我有一个微调器,当我从微调器中选择值时,它的字体大小为14dp、16dp等 我想在运行时更改应用程序所有活动的文本视图中的字体大小。 这可能吗 我参考了几个答案,但对我不起作用 请尝试以下代码: package com.packegename; import android.app.Activity; import android.os.Bundle; import android.util.TypedValue; import android.view.View; import androi

我有一个微调器,当我从微调器中选择值时,它的字体大小为14dp、16dp等 我想在运行时更改应用程序所有活动的文本视图中的字体大小。 这可能吗

我参考了几个答案,但对我不起作用

请尝试以下代码:

package com.packegename;

import android.app.Activity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidTextSize extends Activity {

 String[] optUnit = {"COMPLEX_UNIT_DIP",
      "COMPLEX_UNIT_IN",
      "COMPLEX_UNIT_MM",
      "COMPLEX_UNIT_PT",
      "COMPLEX_UNIT_PX",
      "COMPLEX_UNIT_SP"};

 int[] valueUnit = { TypedValue.COMPLEX_UNIT_DIP,
      TypedValue.COMPLEX_UNIT_IN,
      TypedValue.COMPLEX_UNIT_MM,
      TypedValue.COMPLEX_UNIT_PT,
      TypedValue.COMPLEX_UNIT_PX,
      TypedValue.COMPLEX_UNIT_SP};

 String[] optSize ={"0.05", "0.1", "0.25", "0.5", "1", "4", "8", "10", "14", "16", "20", "30"};
 float[] valueSize = {0.05f, 0.1f, 0.25f, 0.5f, 1f, 4f, 8f, 10f, 14f, 16f, 20f, 30f};

 Spinner selUnit, selSize;
 TextView textOut;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        selUnit = (Spinner)findViewById(R.id.selunit);
        selSize = (Spinner)findViewById(R.id.selsize);
     textOut = (TextView)findViewById(R.id.textout);

     ArrayAdapter<String> adapterUnit = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, optUnit);
     adapterUnit.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     selUnit.setAdapter(adapterUnit);
     selUnit.setOnItemSelectedListener(selUnitOnItemSelectedListener);

     ArrayAdapter<String> adapterSize = new ArrayAdapter<String>(this,
             android.R.layout.simple_list_item_1, optSize);
     adapterSize.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     selSize.setAdapter(adapterSize);
     selSize.setOnItemSelectedListener(selSizeOnItemSelectedListener);
    }

    private Spinner.OnItemSelectedListener selUnitOnItemSelectedListener
    = new Spinner.OnItemSelectedListener(){

  @Override
  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   updateTextSize();
  }

  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
   // TODO Auto-generated method stub

  }};

 private Spinner.OnItemSelectedListener selSizeOnItemSelectedListener
 = new Spinner.OnItemSelectedListener(){

  @Override
  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   updateTextSize();
  }

  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
   // TODO Auto-generated method stub

  }};

 private void updateTextSize(){
  int unit = valueUnit[selUnit.getSelectedItemPosition()];
  String strUnit = optUnit[selUnit.getSelectedItemPosition()];
  float size = valueSize[selSize.getSelectedItemPosition()];
  String strSize = optSize[selSize.getSelectedItemPosition()];

  textOut.setTextSize(unit, size);
  textOut.setText(strUnit + " : " + strSize); 
 }   
}
任何其他布局视图都只需创建如上所述的方法

并将此函数用于应用程序的任何活动,如

private void setAllFontSizeOf(float theSize) {
        TextVFontsize.updateTextView(textview, theSize); 

       TextFontSize.updateEditText(Edittext,theSize);

    }
最后将此方法声明给特定的活动

请尝试以下代码:

package com.packegename;

import android.app.Activity;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;

public class AndroidTextSize extends Activity {

 String[] optUnit = {"COMPLEX_UNIT_DIP",
      "COMPLEX_UNIT_IN",
      "COMPLEX_UNIT_MM",
      "COMPLEX_UNIT_PT",
      "COMPLEX_UNIT_PX",
      "COMPLEX_UNIT_SP"};

 int[] valueUnit = { TypedValue.COMPLEX_UNIT_DIP,
      TypedValue.COMPLEX_UNIT_IN,
      TypedValue.COMPLEX_UNIT_MM,
      TypedValue.COMPLEX_UNIT_PT,
      TypedValue.COMPLEX_UNIT_PX,
      TypedValue.COMPLEX_UNIT_SP};

 String[] optSize ={"0.05", "0.1", "0.25", "0.5", "1", "4", "8", "10", "14", "16", "20", "30"};
 float[] valueSize = {0.05f, 0.1f, 0.25f, 0.5f, 1f, 4f, 8f, 10f, 14f, 16f, 20f, 30f};

 Spinner selUnit, selSize;
 TextView textOut;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        selUnit = (Spinner)findViewById(R.id.selunit);
        selSize = (Spinner)findViewById(R.id.selsize);
     textOut = (TextView)findViewById(R.id.textout);

     ArrayAdapter<String> adapterUnit = new ArrayAdapter<String>(this,
                android.R.layout.simple_list_item_1, optUnit);
     adapterUnit.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     selUnit.setAdapter(adapterUnit);
     selUnit.setOnItemSelectedListener(selUnitOnItemSelectedListener);

     ArrayAdapter<String> adapterSize = new ArrayAdapter<String>(this,
             android.R.layout.simple_list_item_1, optSize);
     adapterSize.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
     selSize.setAdapter(adapterSize);
     selSize.setOnItemSelectedListener(selSizeOnItemSelectedListener);
    }

    private Spinner.OnItemSelectedListener selUnitOnItemSelectedListener
    = new Spinner.OnItemSelectedListener(){

  @Override
  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   updateTextSize();
  }

  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
   // TODO Auto-generated method stub

  }};

 private Spinner.OnItemSelectedListener selSizeOnItemSelectedListener
 = new Spinner.OnItemSelectedListener(){

  @Override
  public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2,
    long arg3) {
   // TODO Auto-generated method stub
   updateTextSize();
  }

  @Override
  public void onNothingSelected(AdapterView<?> arg0) {
   // TODO Auto-generated method stub

  }};

 private void updateTextSize(){
  int unit = valueUnit[selUnit.getSelectedItemPosition()];
  String strUnit = optUnit[selUnit.getSelectedItemPosition()];
  float size = valueSize[selSize.getSelectedItemPosition()];
  String strSize = optSize[selSize.getSelectedItemPosition()];

  textOut.setTextSize(unit, size);
  textOut.setText(strUnit + " : " + strSize); 
 }   
}
任何其他布局视图都只需创建如上所述的方法

并将此函数用于应用程序的任何活动,如

private void setAllFontSizeOf(float theSize) {
        TextVFontsize.updateTextView(textview, theSize); 

       TextFontSize.updateEditText(Edittext,theSize);

    }

最后将此方法声明给特定的活动

是否可以更改dp中的大小?是否可以更改dp中的大小?