更改android中字符串数组内的字体样式/格式

时间:2015-12-24 23:29:16

标签: java android xml fonts

我目前正在开发我的第一个应用程序 - 没有java或android的经验所以请耐心等待我:)

在应用程序中,我使用的是仅包含文本的自定义列表视图,以及每个列表项/容器中的4个文本视图。

使用这些文本视图我使用自定义字体(在listview适配器中使用java应用)。

字体加载在assets / fonts中 从strings.xml

中的字符串数组中提取文本

到目前为止,我已经使用本网站上的所有Q& A找到了所有这些,但似乎无法找到以下解决方案......

我想在段落/句子中更改文本的样式(具有自定义字体)。我想突出显示斜体字中的特定单词或短语:

享受编码。

单词 enjoy 是斜体,其中句子的其余部分是常规格式。

我已经看过很多关于如何将整个班级或文本视图更改为斜体或粗体样式但不是文本的特定部分的指南。

到目前为止,我发现唯一可行的解​​决方案是在strings.xml中尝试斜体标记,但这似乎不起作用,我不知道为什么

我假设我需要做的是: 1.在java中单独加载斜体版本的字体 2,然后编写一些代码,告诉应用程序将此字体应用于文本的特定部分,以字符串xml或其他方式。 (最好是字符串xml,因为有很多文字)

非常感谢您的帮助,非常感谢。

如果我的解释在我的第一篇文章中过于简短,请道歉。

我的代码:(如果您还需要其他任何内容,请与我联系。)

主要活动

自定义列表视图适配器

主xml布局

行xml布局

public class WirdActivity extends Activity {

MediaPlayer mp;
String[] Arabic;
String[] Transliteration;
String[] Translation;
String[] Number;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_wird);
    Resources res=getResources();
    Arabic=res.getStringArray(R.array.wirdarabic);
    Transliteration=res.getStringArray(R.array.wirdtransliteration);
    Translation=res.getStringArray(R.array.wirdtranslation);
    Number=res.getStringArray(R.array.wirdnumber);





    mp = MediaPlayer.create(this, R.raw.wird);



    Button playwird = (Button) findViewById(R.id.playwird);
    playwird.performClick();
    playwird.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {


            mp.start();

        }


    });
    ImageButton pausewird = (ImageButton) findViewById(R.id.pausewird);

    pausewird.setOnClickListener(new View.OnClickListener() {
        public void onClick(View view) {


            mp.pause();

        }


    });


    ListAdapter theAdapter = new Wirdadapter(this, Arabic, Transliteration, Translation, Number);
    final ListView wirdlist  = (ListView) findViewById(R.id.wirdlist);
    wirdlist.setAdapter(theAdapter);






    }

@Override
protected void onDestroy() {


    super.onDestroy();
    mp.stop();

}




class Wirdadapter extends ArrayAdapter<String> {
private AssetManager assets;

Typeface font = Typeface.createFromAsset(getContext().getAssets(),
        "fonts/trado.ttf");
Typeface font2 = Typeface.createFromAsset(getContext().getAssets(),
        "fonts/JaghbUni-Rom.ttf");

String[] titleArray;
String[] descriptionArray;
String[] subtitleArray;
String[] numberArray;



public Wirdadapter(Context context, String[] titles, String[] desc,String[] sub,String[] num) {
    super(context, R.layout.row_layout_3, R.id.textview2,titles);
    this.titleArray=titles;
    this.descriptionArray=desc;
    this.subtitleArray=sub;
    this.numberArray=num;

}

@Override
public View getView(int position, View convertView, ViewGroup parent) {





    LayoutInflater theInflater = LayoutInflater.from(getContext());

    View theView = theInflater.inflate(R.layout.row_layout_3, parent, false);

    TextView Arabic = (TextView) theView.findViewById(R.id.textview2);
    TextView Transliteration = (TextView) theView.findViewById(R.id.transliteration);
    TextView Translation = (TextView) theView.findViewById(R.id.translation);
    TextView Number = (TextView) theView.findViewById(R.id.number);

    Arabic.setText(titleArray[position]);
    Transliteration.setText(descriptionArray[position]);
    Translation.setText(subtitleArray[position]);
    Number.setText(numberArray[position]);

    Arabic.setTypeface(font);
    Transliteration.setTypeface(font2);
    Translation.setTypeface(font2);
    Number.setTypeface(font2);

    return theView;


}



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="5000pt"
android:background="@drawable/gradient_background3"
tools:context=".WirdActivity"
android:orientation="vertical"
android:focusableInTouchMode="true"
>

<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="#927e68"

>
<TextView
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="@string/wird_title"
android:textSize="16sp"
android:padding="10dp"
android:layout_marginStart="5dp"
android:textColor="#ffffff"
android:id="@+id/wirdtitle"
/>
<ImageButton
    android:layout_height="25dp"
    android:layout_width="30dp"
    android:id="@+id/pausewird"
    android:background="@drawable/pause"
    android:clickable="true"
    android:layout_gravity="center"
    android:layout_marginEnd="65dp"
    android:layout_alignParentEnd="true"
    android:layout_alignBottom="@+id/playwird"

    />
<Button
    android:layout_height="25dp"
    android:layout_width="25dp"
    android:id="@+id/playwird"
    android:background="@drawable/play"
    android:clickable="true"
    android:layout_alignBottom="@id/wirdtitle"
    android:layout_marginEnd="15dp"
    android:layout_marginBottom="17.5dp"
    android:layout_alignParentEnd="true"
    />





</RelativeLayout>

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/scrollView1"
    android:layout_width="match_parent"
    android:layout_height="515dp" >

<LinearLayout
    android:id="@+id/relativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scaleType="fitStart"
        android:src="@drawable/w1"
        android:id="@+id/wirdhead"
        android:adjustViewBounds="true"/>

    <ListView
       android:layout_width="match_parent"
       android:layout_height="4100dp"
       android:id="@+id/wirdlist"
       android:gravity="right"
       android:divider="#f1f1f1"
       android:dividerHeight="0.5dp"
>

   </ListView>
</LinearLayout>
</ScrollView>
</LinearLayout>



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/number"
    android:textSize="10sp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingTop="15dp"
    android:textColor="#4c4c4c">

</TextView>

<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/textview2"
    android:textSize="30sp"
    android:padding="15dp"
    android:layout_alignParentRight="true"
    android:layoutDirection="rtl"
    android:gravity="right"
    android:textColor="#4c4c4c">

</TextView>
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/transliteration"
    android:textSize="15sp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingBottom="5dp"

    android:textColor="#4c4c4c">

</TextView>
<TextView
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:id="@+id/translation"
    android:textSize="15sp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp"
    android:paddingBottom="15dp"
    android:textColor="#4c4c4c">

</TextView>

</LinearLayout>

1 个答案:

答案 0 :(得分:0)

您可以使用SpannableStringBuilder类或Html.fromHtml()方法。更简单的是Html.fromHtml()方法。

示例:

tView.setText(Html.fromHtml("I <i>enjoy</i> coding"));

Html.fromHtml()方法基本上返回一个SpannableString,但我发现它比使用SpannableStringBuilder类更容易。

话虽这么说,如果你想动态修改String,那么你需要使用SpannableStringBuilder类。

注意: 我没有在XML字符串资源上尝试fromHtml()方法,但尝试并共享结果。

<强> PS: 如果您对SpannableString类非常好奇,请​​转到here获取一个简单示例,或者here获取完整文档。