android在运行时动态更改样式

android在运行时动态更改样式,android,coding-style,Android,Coding Style,我想让我的字体大小可配置,但我也想利用我的布局风格标签。是否可以在运行时更改样式的定义?或者是手动更改每个textview等上的单个样式元素的唯一选项?我不确定这是否适用于您的情况,但您可以创建定义样式的主题。有一个Activity.setTheme(),您将其传递到一个主题XML文件中。主题包含一系列定义 我只使用它来覆盖某些全局样式,比如背景色,我不知道是否可以使用它来定义小部件将使用的样式。不过值得一试。如果有效,请让我知道 不支持在创建视图后更改样式。。因此,您可以做的是: 创建类型为v

我想让我的字体大小可配置,但我也想利用我的布局风格标签。是否可以在运行时更改样式的定义?或者是手动更改每个textview等上的单个样式元素的唯一选项?

我不确定这是否适用于您的情况,但您可以创建定义样式的主题。有一个
Activity.setTheme()
,您将其传递到一个主题XML文件中。主题包含一系列定义


我只使用它来覆盖某些全局样式,比如背景色,我不知道是否可以使用它来定义小部件将使用的样式。不过值得一试。如果有效,请让我知道

不支持在创建视图后更改样式。。因此,您可以做的是:

  • 创建类型为value的新android xml文件
  • 添加新主题
  • 将元素添加到该主题及其值并保存文件
  • 现在,当您动态创建新视图时,您将调用允许定义defStyle的构造函数。然后,指向刚刚创建的样式ID,方法是指向R.“XML文件名”。“您的样式ID”

    以下示例代码在运行时动态更改文本的大小/样式。 attrs.xml

      <?xml version="1.0" encoding="utf-8"?>
      <resources>
           <!-- View styles -->
           <attr name="textTitle" format="reference" />
           <attr name="textBody" format="reference" />
      </resources>
    
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
       <style name="small_title_text">
          <item name="android:textSize">22sp</item>
          <item name="android:textColor">@color/green</item>
          <item name="android:textStyle">normal</item>
          <item name="android:paddingBottom">5dip</item>
       </style>
       <style name="small_body_text">
          <item name="android:textSize">16sp</item>
          <item name="android:textColor">@color/white</item>
          <item name="android:textStyle">normal</item>
          <item name="android:paddingBottom">5dip</item>
       </style>
       <style name="large_title_text">
          <item name="android:textSize">28sp</item>
          <item name="android:textColor">@color/red</item>
          <item name="android:textStyle">normal</item>
          <item name="android:paddingBottom">5dip</item>
       </style>
    
       <style name="large_body_text">
          <item name="android:textSize">20sp</item>
          <item name="android:textColor">@color/white</item>
          <item name="android:textStyle">normal</item>
          <item name="android:paddingBottom">5dip</item>
       </style>
    
      <!-- Base application theme is the default theme. -->
      <style name="Theme" parent="android:Theme">
      </style>
    
      <style name="Theme.Small">
         <item name="textTitle">@style/small_title_text</item>
         <item name="textBody">@style/small_body_text</item>
      </style>
    
      <style name="Theme.Large">
          <item name="textTitle">@style/large_title_text</item>
          <item name="textBody">@style/large_body_text</item>
      </style>
     </resources>
    
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         >
    
     <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    <RadioButton 
        android:text="Large Text" 
        android:id="@+id/textSizeLarge" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </RadioButton>
    <RadioButton 
        android:text="Small Text" 
        android:id="@+id/textSizeSmall" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </RadioButton>
     </RadioGroup>
     <TextView  
          android:id="@+id/title" 
    style="?textTitle" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text="Select the size of the text"
         />
     <TextView  
        android:id="@+id/body" 
        style="?textBody" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text="@string/message"
         />
     </LinearLayout>
    

    在这里,我认为您可以为特定的文本视图设置文本外观,如果我需要android textview类的相同外观,以便它将应用于所有文本视图,那么如何实现呢?我可以在运行时(创建按钮后)更改按钮的主题吗?
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
         android:orientation="vertical"
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         >
    
     <RadioGroup
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
    <RadioButton 
        android:text="Large Text" 
        android:id="@+id/textSizeLarge" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </RadioButton>
    <RadioButton 
        android:text="Small Text" 
        android:id="@+id/textSizeSmall" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content">
    </RadioButton>
     </RadioGroup>
     <TextView  
          android:id="@+id/title" 
    style="?textTitle" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text="Select the size of the text"
         />
     <TextView  
        android:id="@+id/body" 
        style="?textBody" 
         android:layout_width="fill_parent" 
         android:layout_height="wrap_content" 
         android:text="@string/message"
         />
     </LinearLayout>
    
         public void onCreate(Bundle savedInstanceState) {
             if ("Large".equalsIgnoreCase( getIntent().getStringExtra( "Theme" )))
             {
                 setTheme(R.style.Theme_Large);
             }
             else if ("Small".equalsIgnoreCase( getIntent().getStringExtra( "Theme" )))
             {
                 setTheme(R.style.Theme_Small);
             }
             super.onCreate(savedInstanceState);
             setContentView(R.layout.main);
    
             RadioButton largeText = ( RadioButton ) findViewById( R.id.textSizeLarge );
             largeText.setOnClickListener( new OnClickListener() {
                 public void onClick( View view ) {
                     Toast.makeText(context, "Large Text Selected", Toast.LENGTH_SHORT).show();
                Intent intent = getIntent();
                intent.putExtra( "Theme", "Large" );
                finish();
                startActivity(intent);
            }
        } );
        
        RadioButton smallText = ( RadioButton ) findViewById( R.id.textSizeSmall );
        smallText.setOnClickListener( new OnClickListener() {
            public void onClick( View view ) {
                Toast.makeText(context, "Small Text Selected", Toast.LENGTH_SHORT).show();
                Intent intent = getIntent();
                intent.putExtra( "Theme", "Small" );
                finish();
                startActivity(intent);
            }
        } );
    }