我有一个textview,显示我从数据库加载的文本。有时,文字是单个字母,如b
,有时它的两个字会超过small word
这两行。
如果我显示一个字母,我希望字体大小更大。我尝试使用带有size属性的html字体标记,并将字符串传递给Html.fromHtml()
:
<font size='6'>d</font>
但遗憾的是,字体大小没有变化,Android似乎无法识别该属性。
我不想在px
中提供字体大小,因为我有时希望使用不同的默认文本大小加载textviews中的文本。
更多细节:
我有一个应用程序,询问用户一系列问题。为此,它在两个单独的textview
中显示两个可能的答案。我的数据库中有几千个问题。该活动一次运行3分钟,我希望用户每三秒钟回答一次问题。
有时候答案是一个单行词,有时它需要两行,有时它只是一个字母。如果它是一封字母,我觉得我通过在相同的文本中显示字母来浪费空间,所以我想增加它的文本化。
在显示问题的字段中,我有类似的问题。有时问题需要两行,有时需要一个简短的单行词。当它需要一行时我也想增加字体大小。
答案 0 :(得分:2)
更新:
我创建了一个CustomTextView类,动态地将ondraw
方法重写为setTextSize
,而不是设置每个TextView。
public class CustomTextView extends TextView {
private static final String TAG = "CustomTextView";
public CustomTextView(Context context) {
super(context);
}
public CustomTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
@Override protected void onDraw(Canvas canvas) {
if (getLineCount() == 1) {
setTextSize(40);
} else {
setTextSize(20);
}
super.onDraw(canvas);
}
}
<强> layout_custom.xml 强>
<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"
android:layout_marginTop="98dp"
>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:weightSum="1"
>
<com.example.blizzard.sof.CustomTextView
android:id="@+id/customtextview1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="fill"
android:layout_weight="0.5"
android:background="@android:color/holo_blue_dark"
android:gravity="center"
android:textColor="@android:color/holo_red_dark"
android:text="Word1 \nWord2"
/>
<com.example.blizzard.sof.CustomTextView
android:id="@+id/customtextview2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="fill"
android:layout_marginLeft="16dp"
android:layout_weight="0.5"
android:background="@android:color/holo_blue_dark"
android:gravity="center"
android:textColor="@android:color/holo_red_dark"
android:text="B"
/>
</LinearLayout>
</LinearLayout>
确保使用适当的包名替换com.example.blizzard.sof.CustomTextView
。
预览:
上一个答案:
您可以使用AutoFitTextView库。
将所有观看次数转换为AutofitTextView
,并确保为属性android:textSize="?"
&amp;设置适当的值。
autofit:minTextSize="?"
。
<强>示例:强>
答案 1 :(得分:0)
如果我正确理解了您的问题,您需要根据显示的字母数设置文字大小。
你可以这样做:
TextView textView = (TextView) findViewById (R.id.your_layout);
if (string.length() > 10) {
textView.setTextSize(10);
else {
textView.setTextSize(20);
}
textView.setText(string);
答案 2 :(得分:0)
你为什么不这样做呢
textview.setText(“Some text”);
textview.post(new Runnable() {
@Override
public void run() {
if(textview.gettext().toString().length==1)
{
textView.setTextSize(10.0f);
}else{
int lineCount = textview.getLineCount();
// Use lineCount here
if(lineCount==1)
{
textView.setTextSize(20.0f);
}else if(lineCount==2)
{
textView.setTextSize(30.0f);
}
}
}
});
这可以让你根据文字保留文字大小。
答案 3 :(得分:0)
TextView textView = (TextView) findViewById (R.id.your_layout);
textView.setTextSize(constant-textView.getText().toString().length);
获取TextView文本,并根据长度设置字体大小。例如 - 如果TextView
包含一个字母&#34; b&#34;然后大小常数 - 1 ,如果它包含两个单词,如&#34; Android Is Cool&#34;那么尺寸将是常数 - 15 ,这是更小的。