您的位置:首页 > 其它

用dimens去实现 屏幕适配

2016-09-21 23:37 155 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

屏幕适配很简单

没想到到现在了还有人在各种问屏幕适配的问题。我真是服了。

15年的时候国内就有很多大神分享了各种屏幕适配的方法。

最近突然被十几个人问。我依然为了应付回答来写博客了。哈哈

我们公司就是dimens方法。最low、最简单、最实用。

下面是代码直上代码。这个代码运行一下就会出现一堆res文件。然后复制到 工程里面就好了

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.example;

<span class="hljs-keyword">import</span> java.io.File;
<span class="hljs-keyword">import</span> java.io.FileNotFoundException;
<span class="hljs-keyword">import</span> java.io.FileOutputStream;
<span class="hljs-keyword">import</span> java.io.PrintWriter;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">GenerateValueFiles</span> {</span>

<span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> baseW;
<span class="hljs-keyword">private</span> <span class="hljs-keyword">int</span> baseH;

<span class="hljs-keyword">private</span> String dirStr = <span class="hljs-string">"./res"</span>;

<span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> String WTemplate = <span class="hljs-string">"<dimen name=\"x{0}\">{1}px</dimen>\n"</span>;
<span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> String HTemplate = <span class="hljs-string">"<dimen name=\"y{0}\">{1}px</dimen>\n"</span>;

<span class="hljs-javadoc">/**
* {0}-HEIGHT
*/</span>
<span class="hljs-keyword">private</span> <span class="hljs-keyword">final</span> <span class="hljs-keyword">static</span> String VALUE_TEMPLATE = <span class="hljs-string">"values-{0}x{1}"</span>;

<span class="hljs-keyword">private</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">final</span> String SUPPORT_DIMESION =
<span class="hljs-string">"320,480;480,800;480,854;540,960;"</span> +
<span class="hljs-string">"600,1024;720,1184;720,1196;720,1280;768,1024;"</span> +
<span class="hljs-string">"768,1280;800,1280;1080,1812;1080,1920;1440,2560;"</span>;

<span class="hljs-keyword">private</span> String supportStr = SUPPORT_DIMESION;

<span class="hljs-keyword">public</span> <span class="hljs-title">GenerateValueFiles</span>(<span class="hljs-keyword">int</span> baseX, <span class="hljs-keyword">int</span> baseY, String supportStr) {
<span class="hljs-keyword">this</span>.baseW = baseX;
<span class="hljs-keyword">this</span>.baseH = baseY;

<span class="hljs-keyword">if</span> (!<span class="hljs-keyword">this</span>.supportStr.contains(baseX + <span class="hljs-string">","</span> + baseY)) {
<span class="hljs-keyword">this</span>.supportStr += baseX + <span class="hljs-string">","</span> + baseY + <span class="hljs-string">";"</span>;
}

<span class="hljs-keyword">this</span>.supportStr += validateInput(supportStr);

System.out.println(supportStr);

File dir = <span class="hljs-keyword">new</span> File(dirStr);
<span class="hljs-keyword">if</span> (!dir.exists()) {
dir.mkdir();

}
System.out.println(dir.getAbsoluteFile());

}

<span class="hljs-javadoc">/**
*<span class="hljs-javadoctag"> @param</span> supportStr w,h_...w,h;
*<span class="hljs-javadoctag"> @return</span>
*/</span>
<span class="hljs-keyword">private</span> String <span class="hljs-title">validateInput</span>(String supportStr) {
StringBuffer sb = <span class="hljs-keyword">new</span> StringBuffer();
String[] vals = supportStr.split(<span class="hljs-string">"_"</span>);
<span class="hljs-keyword">int</span> w = -<span class="hljs-number">1</span>;
<span class="hljs-keyword">int</span> h = -<span class="hljs-number">1</span>;
String[] wh;
<span class="hljs-keyword">for</span> (String val : vals) {
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">if</span> (val == <span class="hljs-keyword">null</span> || val.trim().length() == <span class="hljs-number">0</span>)
<span class="hljs-keyword">continue</span>;

wh = val.split(<span class="hljs-string">","</span>);
w = Integer.parseInt(wh[<span class="hljs-number">0</span>]);
h = Integer.parseInt(wh[<span class="hljs-number">1</span>]);
} <span class="hljs-keyword">catch</span> (Exception e) {
System.out.println(<span class="hljs-string">"skip invalidate params : w,h = "</span> + val);
<span class="hljs-keyword">continue</span>;
}
sb.append(w + <span class="hljs-string">","</span> + h + <span class="hljs-string">";"</span>);
}

<span class="hljs-keyword">return</span> sb.toString();
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">generate</span>() {
String[] vals = supportStr.split(<span class="hljs-string">";"</span>);
<span class="hljs-keyword">for</span> (String val : vals) {
String[] wh = val.split(<span class="hljs-string">","</span>);
generateXmlFile(Integer.parseInt(wh[<span class="hljs-number">0</span>]), Integer.parseInt(wh[<span class="hljs-number">1</span>]));
}

}

<span class="hljs-keyword">private</span> <span class="hljs-keyword">void</span> <span class="hljs-title">generateXmlFile</span>(<span class="hljs-keyword">int</span> w, <span class="hljs-keyword">int</span> h) {

StringBuffer sbForWidth = <span class="hljs-keyword">new</span> StringBuffer();
sbForWidth.append(<span class="hljs-string">"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"</span>);
sbForWidth.append(<span class="hljs-string">"<resources>"</span>);
<span class="hljs-keyword">float</span> cellw = w * <span class="hljs-number">1.0</span>f / baseW;

System.out.println(<span class="hljs-string">"width : "</span> + w + <span class="hljs-string">","</span> + baseW + <span class="hljs-string">","</span> + cellw);
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">1</span>; i < baseW; i++) {
sbForWidth.append(WTemplate.replace(<span class="hljs-string">"{0}"</span>, i + <span class="hljs-string">""</span>).replace(<span class="hljs-string">"{1}"</span>,
change(cellw * i) + <span class="hljs-string">""</span>));
}
sbForWidth.append(WTemplate.replace(<span class="hljs-string">"{0}"</span>, baseW + <span class="hljs-string">""</span>).replace(<span class="hljs-string">"{1}"</span>,
w + <span class="hljs-string">""</span>));
sbForWidth.append(<span class="hljs-string">"</resources>"</span>);

StringBuffer sbForHeight = <span class="hljs-keyword">new</span> StringBuffer();
sbForHeight.append(<span class="hljs-string">"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"</span>);
sbForHeight.append(<span class="hljs-string">"<resources>"</span>);
<span class="hljs-keyword">float</span> cellh = h * <span class="hljs-number">1.0</span>f / baseH;
System.out.println(<span class="hljs-string">"height : "</span> + h + <span class="hljs-string">","</span> + baseH + <span class="hljs-string">","</span> + cellh);
<span class="hljs-keyword">for</span> (<span class="hljs-keyword">int</span> i = <span class="hljs-number">1</span>; i < baseH; i++) {
sbForHeight.append(HTemplate.replace(<span class="hljs-string">"{0}"</span>, i + <span class="hljs-string">""</span>).replace(<span class="hljs-string">"{1}"</span>,
change(cellh * i) + <span class="hljs-string">""</span>));
}
sbForHeight.append(HTemplate.replace(<span class="hljs-string">"{0}"</span>, baseH + <span class="hljs-string">""</span>).replace(<span class="hljs-string">"{1}"</span>,
h + <span class="hljs-string">""</span>));
sbForHeight.append(<span class="hljs-string">"</resources>"</span>);

File fileDir = <span class="hljs-keyword">new</span> File(dirStr + File.separator
+ VALUE_TEMPLATE.replace(<span class="hljs-string">"{0}"</span>, h + <span class="hljs-string">""</span>)<span class="hljs-comment">//</span>
.replace(<span class="hljs-string">"{1}"</span>, w + <span class="hljs-string">""</span>));
fileDir.mkdir();

File layxFile = <span class="hljs-keyword">new</span> File(fileDir.getAbsolutePath(), <span class="hljs-string">"lay_x.xml"</span>);
File layyFile = <span class="hljs-keyword">new</span> File(fileDir.getAbsolutePath(), <span class="hljs-string">"lay_y.xml"</span>);
<span class="hljs-keyword">try</span> {
PrintWriter pw = <span class="hljs-keyword">new</span> PrintWriter(<span class="hljs-keyword">new</span> FileOutputStream(layxFile));
pw.print(sbForWidth.toString());
pw.close();
pw = <span class="hljs-keyword">new</span> PrintWriter(<span class="hljs-keyword">new</span> FileOutputStream(layyFile));
pw.print(sbForHeight.toString());
pw.close();
} <span class="hljs-keyword">catch</span> (FileNotFoundException e) {
e.printStackTrace();
}
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">float</span> <span class="hljs-title">change</span>(<span class="hljs-keyword">float</span> a) {
<span class="hljs-keyword">int</span> temp = (<span class="hljs-keyword">int</span>) (a * <span class="hljs-number">100</span>);
<span class="hljs-keyword">return</span> temp / <span class="hljs-number">100</span>f;
}

<span class="hljs-keyword">public</span> <span class="hljs-keyword">static</span> <span class="hljs-keyword">void</span> <span class="hljs-title">main</span>(String[] args) {
<span class="hljs-keyword">int</span> baseW = <span class="hljs-number">720</span> ;
<span class="hljs-keyword">int</span> baseH = <span class="hljs-number">1280</span>;
String addition = <span class="hljs-string">""</span>;
<span class="hljs-keyword">try</span> {
<span class="hljs-keyword">if</span> (args.length >= <span class="hljs-number">3</span>) {
baseW = Integer.parseInt(args[<span class="hljs-number">0</span>]);
baseH = Integer.parseInt(args[<span class="hljs-number">1</span>]);
addition = args[<span class="hljs-number">2</span>];
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (args.length >= <span class="hljs-number">2</span>) {
baseW = Integer.parseInt(args[<span class="hljs-number">0</span>]);
baseH = Integer.parseInt(args[<span class="hljs-number">1</span>]);
} <span class="hljs-keyword">else</span> <span class="hljs-keyword">if</span> (args.length >= <span class="hljs-number">1</span>) {
addition = args[<span class="hljs-number">0</span>];
}
} <span class="hljs-keyword">catch</span> (NumberFormatException e) {

System.err
.println(<span class="hljs-string">"right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;"</span>);
e.printStackTrace();
System.exit(-<span class="hljs-number">1</span>);
}

<span class="hljs-keyword">new</span> GenerateValueFiles(baseW, baseH, addition).generate();
}

}</code><ul class="pre-numbering"><li>1</li><li>2</li><li>3</li><li>4</li><li>5</li><li>6</li><li>7</li><li>8</li><li>9</li><li>10</li><li>11</li><li>12</li><li>13</li><li>14</li><li>15</li><li>16</li><li>17</li><li>18</li><li>19</li><li>20</li><li>21</li><li>22</li><li>23</li><li>24</li><li>25</li><li>26</li><li>27</li><li>28</li><li>29</li><li>30</li><li>31</li><li>32</li><li>33</li><li>34</li><li>35</li><li>36</li><li>37</li><li>38</li><li>39</li><li>40</li><li>41</li><li>42</li><li>43</li><li>44</li><li>45</li><li>46</li><li>47</li><li>48</li><li>49</li><li>50</li><li>51</li><li>52</li><li>53</li><li>54</li><li>55</li><li>56</li><li>57</li><li>58</li><li>59</li><li>60</li><li>61</li><li>62</li><li>63</li><li>64</li><li>65</li><li>66</li><li>67</li><li>68</li><li>69</li><li>70</li><li>71</li><li>72</li><li>73</li><li>74</li><li>75</li><li>76</li><li>77</li><li>78</li><li>79</li><li>80</li><li>81</li><li>82</li><li>83</li><li>84</li><li>85</li><li>86</li><li>87</li><li>88</li><li>89</li><li>90</li><li>91</li><li>92</li><li>93</li><li>94</li><li>95</li><li>96</li><li>97</li><li>98</li><li>99</li><li>100</li><li>101</li><li>102</li><li>103</li><li>104</li><li>105</li><li>106</li><li>107</li><li>108</li><li>109</li><li>110</li><li>111</li><li>112</li><li>113</li><li>114</li><li>115</li><li>116</li><li>117</li><li>118</li><li>119</li><li>120</li><li>121</li><li>122</li><li>123</li><li>124</li><li>125</li><li>126</li><li>127</li><li>128</li><li>129</li><li>130</li><li>131</li><li>132</li><li>133</li><li>134</li><li>135</li><li>136</li><li>137</li><li>138</li><li>139</li><li>140</li><li>141</li><li>142</li><li>143</li><li>144</li><li>145</li><li>146</li><li>147</li><li>148</li><li>149</li><li>150</li><li>151</li><li>152</li><li>153</li><li>154</li><li>155</li><li>156</li><li>157</li><li>158</li><li>159</li><li>160</li><li>161</li><li>162</li><li>163</li><li>164</li><li>165</li><li>166</li><li>167</li></ul><div class="save_code tracking-ad" style="display: none;" data-mod="popu_249"><a target=_blank target="_blank"><img src="http://static.blog.csdn.net/images/save_snippets.png" alt="" /></a></div>

运行完之后出现res文件夹,他下面会出现一堆values文件。直接复制到as里面这样的



这个方法立竿见影。直接用就好了。不懂得看看代码也能明白

尊重原创:http://write.blog.csdn.net/mdeditor#!postId=51131403
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: