所以我有一个主要用 XML 定义的屏幕,我在 XML 文件中选择了 ?attr/textAppeareanceLarge。
当我输入一些代码来查找TextView
ID 时,将 textsize 转储到 LogCat,使用setTextAppearance
to更改文本外观android.R.attr.textAppearnaceSmall
,大小保持不变。日志说它正在使用 33.0 textsize
相反,在我正在修改的自定义首选项中,我想创建一个文本标签。以编程方式将文本指定为较大,使用setTextAppearance(android.R.attr.textAppearanceLarge)
仍然会产生较小的文本大小(在 20 左右)。
关于为什么文本大小搞砸了,我唯一能想到的是我可能使用了填充父级,而另一个是包装内容。它真的会影响文字大小吗?
更新:也许一些代码会更好地演示。我正在创建一个自定义首选项小部件。它应该有一个使用文本字符串作为首选项标题的文本标签和一个时间选择器。我没有得到的是为什么这里的 textAppearanceLarge 不会改变文本大小。即setTextAppearance 之前和之后的日志返回相同的值。
@Override
protected View onCreateView(ViewGroup parent) {
LinearLayout layout = new LinearLayout(getContext());
LinearLayout.LayoutParams params1 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
params1.gravity = Gravity.CENTER;
params1.weight = 1.0f;
TextView text = new TextView(getContext());
text.setText(getTitle());
Log.d(this.getClass().getName(),Float.toString(text.getTextSize()));
text.setTextAppearance(getContext(),android.R.attr.textAppearanceLarge);
Log.d(this.getClass().getName(),Float.toString(text.getTextSize()));
text.setGravity(Gravity.CENTER);
text.setLayoutParams(params1);
TimePicker picker = new TimePicker(getContext());
picker.setCurrentHour(m_hour);
picker.setCurrentMinute(m_minute);
LinearLayout.LayoutParams params2 = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
params2.gravity = Gravity.RIGHT;
picker.setLayoutParams(params2);
picker.setOnTimeChangedListener(this);
picker.setLayoutParams(params2);
layout.setOrientation(LinearLayout.HORIZONTAL);
layout.addView(text);
layout.addView(picker);
layout.setId(android.R.id.widget_frame);
return layout;
}