增加ListFragment内置的空文本视图大小

时间:2014-07-04 13:59:56

标签: android textview android-listfragment

我在我的应用中使用了listfragment。当数据加载失败时,我使用失败消息调用setEmptyText。这在4英寸手机上运行良好,但在7英寸和10英寸手机上,空文本视图的大小非常小,难以阅读。

4英寸空文字视图

enter image description here

7英寸空文字视图

enter image description here

如何增加空文本视图的大小?

5 个答案:

答案 0 :(得分:4)

您可以提供自己的TextView作为&#34;空文本&#34;,它只需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)

  1. 创建不同的文件夹,例如res / values-sw720dp,res / values-sw600dp, RES /值-V11。

  2. 使用不同屏幕大小的不同字体大小创建dimen.xml。

  3. 使用values / dimen.xml:

    &LT;资源&GT; &lt; dimen name =“normal_font”&gt; 16sp&lt; / dimen&gt;   &LT; /资源&GT;

  4. 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中),您可以使用现已弃用的getWidthgetHeight方法:

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乘数值更改为所需比率