Android - 以编程方式设置TextView TextStyle?

时间:2011-10-27 16:26:49

标签: java android textview

有没有办法以编程方式设置textStyle的{​​{1}}属性?似乎没有TextView方法。

要清楚,我不是在谈论View / Widget样式!我在谈论以下内容:

setTextStyle()

11 个答案:

答案 0 :(得分:345)

textview.setTypeface(Typeface.DEFAULT_BOLD);

setTypeface是Attribute textStyle。

添加 Shankar V 后,为了保留以前设置的字体属性,您可以使用:

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

答案 1 :(得分:109)

假设您在values / styles.xml上有一个名为RedHUGEText的样式:

<style name="RedHUGEText" parent="@android:style/Widget.TextView">
    <item name="android:textSize">@dimen/text_size_huge</item>
    <item name="android:textColor">@color/red</item>
    <item name="android:textStyle">bold</item>
</style>

只需像往常一样在XML layout / your_layout.xml文件中创建TextView,让我们说:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" />

在您的Activity的java代码中,您可以执行以下操作:

TextView textViewTitle = (TextView) findViewById(R.id.text_view_title);
textViewTitle.setTextAppearance(this, R.style.RedHUGEText);

它对我有用!它应用了颜色,大小,重力等。我已经在Android API级别从8到17的手机和平板电脑上使用它,没有任何问题。

请记住......只有当文本的样式真正依赖于Java逻辑上的条件或者使用代码“动态”构建UI时,这才有用...如果没有,则为更好的做法:

<TextView android:id="@+id/text_view_title" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content 
    android:text="FOO" 
    style="@style/RedHUGEText" />

你可以随时随地使用它!

希望它有所帮助!

答案 2 :(得分:59)

搜索setTextAppearancesetTextTypeface。 stackoverflow上有类似的问题:How to change a TextView's style at runtime

答案 3 :(得分:46)

实现这项任务的方法很多,其中一些如下: -

<强> 1

String text_view_str = "<b>Bolded text</b>, <i>italic text</i>, even <u>underlined</u>!";
TextView tv = (TextView)findViewById(R.id.ur_text_view_id);
tv.setText(Html.fromHtml(text_view_str));

<强> 2

tv.setTypeface(null, Typeface.BOLD);
tv.setTypeface(null, Typeface.ITALIC);
tv.setTypeface(null, Typeface.BOLD_ITALIC);
tv.setTypeface(null, Typeface.NORMAL);

第3

SpannableString spannablecontent=new SpannableString(o.content.toString());
spannablecontent.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 
                         0,spannablecontent.length(), 0);
// set Text here
tt.setText(spannablecontent);

<强> 4

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="boldText">
        <item name="android:textStyle">bold|italic</item>
        <item name="android:textColor">#FFFFFF</item>
    </style>

    <style name="normalText">
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">#C0C0C0</item>
    </style>

</resources>

 tv.setTextAppearance(getApplicationContext(), R.style.boldText);

或者如果你想通过xml

android:textStyle="normal"
android:textStyle="normal|bold"
android:textStyle="normal|italic"
android:textStyle="bold"
android:textStyle="bold|italic"

答案 4 :(得分:7)

许多地方都会以很多不同的方式提出这个问题。我最初在这里回答它,但我觉得它在这个帖子中也是相关的(因为我在寻找答案时最终here)。

这个问题没有一线解决方案,但这适用于我的用例。问题是,'View(context,attrs,defStyle)'构造函数不引用实际样式,它需要一个属性。所以,我们会:

  1. 定义属性
  2. 创建您要使用的样式
  3. 在我们的主题上为该属性应用样式
  4. 使用该属性创建视图的新实例
  5. 在'res / values / attrs.xml'中,定义一个新属性:

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <attr name="customTextViewStyle" format="reference"/>
        ...
    </resources>    
    

    在res / values / styles.xml中我将创建我想在自定义TextView上使用的样式

    <style name="CustomTextView">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@color/white</item>
        <item name="android:paddingLeft">14dp</item>
    </style>
    

    在'res / values / themes.xml'或'res / values / styles.xml'中,修改应用程序/活动的主题并添加以下样式:

    <resources>
        <style name="AppBaseTheme" parent="android:Theme.Light">
            <item name="@attr/customTextViewStyle">@style/CustomTextView</item>
        </style>
        ... 
    </resources>
    

    最后,在自定义TextView中,您现在可以使用带有属性的构造函数,它将接收您的样式

    public class CustomTextView extends TextView {
    
        public CustomTextView(Context context) {
           super(context, null, R.attr.customTextView);
        }
    }
    

    值得注意的是,我在不同的变体和不同的地方重复使用customTextView,但是视图的名称绝不需要与样式或属性或任何东西相匹配。此外,此技术应该适用于任何自定义视图,而不仅仅是TextViews。

答案 5 :(得分:5)

private IEnumerator UploadAssets() { Debug.LogError("starting now"); string baseURL = "http://config2.gamesparks.net/restv2/game/{myapikey}/config/~downloadables/testingfile/file"; //string encodedURL = WWW.EscapeURL(baseURL); byte[] bytes = File.ReadAllBytes("D:\\testingfile.txt"); WWWForm form = new WWWForm(); form.AddField("downloadableId", "testingfile"); form.AddField("apiKey", "{myapikey}"); form.AddBinaryData("formData", bytes, "D:\\testingfile.txt", "text/plain"); Debug.Log(baseURL); using (UnityWebRequest www = UnityWebRequest.Post(baseURL, form)) { www.SetRequestHeader("Authorization", "{myusernamepassword}"); www.SetRequestHeader("Accept", "application/json"); yield return www.SendWebRequest(); Debug.LogError(www.responseCode); Debug.LogError(www.GetResponseHeader("shortCode")); if (www.isNetworkError || www.isHttpError) { Debug.Log(www.error); } else { Debug.Log("Form upload complete!"); } } }

要保留除文字样式外的当前字体:

Kotlin Version

答案 6 :(得分:4)

这对我有用

textview.setTypeface(textview.getTypeface(), Typeface.BOLD);

textview.setTypeface(Typeface.DEFAULT_BOLD);

答案 7 :(得分:2)

我用两种简单的方法解决了这个问题。

按照说明进行操作。

我现有的样式声明:

<style name="SearchInfoText">
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:textSize">24sp</item>
    <item name="android:textColor">@color/Church_Grey</item>
    <item name="android:shadowColor">@color/Shadow_Church</item>
    <item name="android:shadowRadius">3</item>
    <item name="android:shadowDx">1</item>
    <item name="android:shadowDy">1</item>
</style>

我的Android Java代码:

    TextView locationName = new TextView(getSupportActivity());
    locationName.setId(IdGenerator.generateViewId());
    locationName.setText(location.getName());
    locationName.setLayoutParams(super.centerHorizontal());
    locationName.setTextSize(24f);
    locationName.setPadding(0, 0, 0, 15);
    locationName.setTextColor(getResources().getColor(R.color.Church_Grey));
    locationName.setShadowLayer(3, 1, 1,  getResources().getColor(R.color.Shadow_Church));

问候。

答案 8 :(得分:2)

由于setTextAppearance(resId)仅适用于API 23及更高版本,请使用:

TextViewCompat.setTextAppearance(textViewGoesHere, resId)

此方法在内部实现如下:

public static void setTextAppearance(@NonNull TextView textView, @StyleRes int resId) {
    if (Build.VERSION.SDK_INT >= 23) {
        textView.setTextAppearance(resId);
    } else {
        textView.setTextAppearance(textView.getContext(), resId);
    }
}

答案 9 :(得分:0)

您可以尝试这个

create table ProductReceipt123
( 
ID int, 
ProductID int, 
ReceiptID int, 
Amount money, 
Installments bit
)

答案 10 :(得分:-1)

如上所述here,目前不支持此功能。