我在我的应用中使用了listfragment。当数据加载失败时,我使用失败消息调用setEmptyText。这在4英寸手机上运行良好,但在7英寸和10英寸手机上,空文本视图的大小非常小,难以阅读。
4英寸空文字视图
7英寸空文字视图
如何增加空文本视图的大小?
答案 0 :(得分:4)
您可以提供自己的TextView
作为"空文本",它只需android:id="@id/android:empty"
而ListFragment
将使用它而不是 <TextView android:id="@id/android:empty"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textSize="... />
标准的。
然后您可以根据需要自定义此TextView的样式(在xml布局中静态):
findViewById()
或致电onCreateView()
中的TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty);
emptyTextView.setTextSize(...);
:
getListView().getEmptyView()
@Delblanco评论说,一个(非常好的)替代方案是致电TextView
。它将返回标识为android.R.id.empty
的{{1}}(如果在布局中提供),或者返回使用的标准TextView
。
答案 1 :(得分:1)
以下是ListFragment的扩展,它以编程方式更改空视图的大小(和颜色):
/**
* Abstract list fragment that does customizations of the list style.
*/
public abstract class LoggingListFragment extends ListFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
TextView emptyView = null;
View possibleEmptyView = view.findViewById(0x00ff0001);
if (possibleEmptyView instanceof TextView) {
emptyView = (TextView) possibleEmptyView;
}
if (emptyView == null) {
possibleEmptyView = getListView().getEmptyView();
if (possibleEmptyView instanceof TextView) {
emptyView = (TextView) possibleEmptyView;
}
}
if (emptyView != null) {
emptyView.setTextColor(getActivity().getResources().getColor(R.color.list_subtitle_normal));
emptyView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 17);
}
return view;
}
}
答案 2 :(得分:0)
创建不同的文件夹,例如res / values-sw720dp,res / values-sw600dp, RES /值-V11。
使用不同屏幕大小的不同字体大小创建dimen.xml。
使用values / dimen.xml:
&LT;资源&GT; &lt; dimen name =“normal_font”&gt; 16sp&lt; / dimen&gt; &LT; /资源&GT;
4.使用xml中的小部件。
机器人:TEXTSIZE =“@扪/ normal_font
答案 3 :(得分:0)
我会做的有点不同。
我的想法:找出屏幕的尺寸,并使用开关/ case语句来调整textView文本的大小。
例如:
switch ( area ) {
case 7inch:
TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty);
emptyTextView.setTextSize(...);
break;
case 4inch:
TextView emptyTextView = (TextView)view.findViewById(android.R.id.empty);
emptyTextView.setTextSize(...);
break;
default:
values_not_caught_above;
}
您可以按如下方式找到屏幕尺寸:
如果您想要显示尺寸(以像素为单位),可以使用getSize:
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
int area = height*width;
如果您不在Activity
,则可以通过WINDOW_SERVICE获取默认显示:
WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
在引入getSize
之前(在API级别13中),您可以使用现已弃用的getWidth
和getHeight
方法:
Display display = getWindowManager().getDefaultDisplay();
int width = display.getWidth(); // deprecated
int height = display.getHeight(); // deprecated
我最喜欢自己的方式,因为很容易为其他设备添加另一个案例陈述(可能是10英寸的屏幕)。您的代码中几乎不需要改变这种方式。
答案 4 :(得分:0)
您可以使用setEmptyText
调用Spannable
方法来增加文字的大小,让我向您展示一些代码:
String yourEmptyTextMessage = getString(R.string.yourEmptyTextMessage);
Spannable spanText = new SpannableString(yourEmptyTextMessage);
spanText.setSpan(new RelativeSizeSpan(1.5f), 0, yourEmptyTextMessage.length(), 0);
setEmptyText(spanText)
您可能希望将1.5f
乘数值更改为所需比率