不同屏幕尺寸的不同日期格式

时间:2015-12-03 17:15:32

标签: android resources date-format simpledateformat

我的Android应用程序可以在桌面和手机上运行(阅读 - 大屏幕和小屏幕)。在我的应用中,我会根据需要使用不同的资源(布局,尺寸,样式,字符串),并将其放在valuesvalues-sw600dp中。

我努力解决的一个因素是日期格式。我在几个地方使用DateFormat.LONG(例如, 2015年11月15日)。这在大屏幕上工作并且看起来非常好,但是在小型电话屏幕上,整个文本不适合并且它被截断。为了解决这个问题,我想对小屏幕使用不同的格式,例如: DateFormat.MEDIUM(这会让我Nov 15, 2015适合小屏幕。)

我可以动态确定屏幕大小并使用一种格式或另一种格式。这感觉效率相当低,我宁愿在资源中指定格式,以便以后可以轻松更改 - 但我无法找到实现此目的的方法。我可以想到一些黑客 - 但它们确实是黑客(例如在字符串资源中存储字符串LONG,然后在运行时使用反射来查找LONG中名为DateFormat的字段并获取其值)。

那么,是否有一种简单的方法可以在资源中存储内置日期格式的指示符?

2 个答案:

答案 0 :(得分:0)

使用类似的东西:

首先approuch:     DateFormat.format(getResources()。getString(R.string.main_data_format),data.getTime())。toString();

在资源中,您将包含不同屏幕的格式。

第二种方法:     java.text.DateFormat.getDateInstance(getResources()getInteger(R.integer.data_format_style));

其中integer是以下之一:

public static final int DEFAULT = 2;
public static final int FULL = 0;
public static final int LONG = 1;
public static final int MEDIUM = 2;
public static final int SHORT = 3;

取决于哪种格式在哪种屏幕尺寸。

为了避免将来更改API的问题,您可以使用默认值准备自己的一组常量:

   <resource>
   <integer name="data_format_default">202</integer>
   <integer name="data_format_full">200</integer>
   <integer name="data_format_long">201</integer>
   <integer name="data_format_medium">202</integer>
   <integer name="data_format_short">203</integer>
    </resource>

然后为每个屏幕大小定义一个int值,它引用上面的一个:

<integer name="foobar__format_style">@integer/data_format_medium</integer>

在同一个util类中定义map方法:

public class Utils {
public static final int getDataFormatStyle(int data_format_style_from_resource){
         switch(data_format_style_from_resource) {
             case data_format_full:  return DataFormat.FULL:
             case data_format_long:  return DataFormat.LONG:
             case data_format_medium:  return DataFormat.MEDIUM:
             case data_format_short:  return DataFormat.SHORT:
             default:  return DataFormat.DEFAULT:
         }    
    }
}

然后像这样使用它们:

final int style = getResources().getInteger(R.integer.foobar__format_style);
DateFormat.getDateInstance(Utils.getDataFormatStyle(style));

答案 1 :(得分:0)

我最终最终使用了反射,因为它为我提供了最容易改变事物的灵活性。这就是我现在得到的:

strings.xml

<string name="title_date_format">LONG</string>

在我的代码中:

String formatString = getString(R.string.title_date_format);
int style = DatFormat.class.getField(formatString).getInt(null);
DateFormat format = DateFormat.getDateInstance(style);