1、TextView设置宽度(行内可包含的字符数)
android:ems="12" //宽度为12个字符的宽度。 android:maxEms="18" //最大宽度为18个字符的宽度。 android:minEms="10" //最小宽度为10个字符的宽度。 android:letterSpacing="0.1" //控制文字水平间距
注意事项:
1、只有在 android:layout_width=“wrap_content” 时,才会显示。
2、ems属性设置的值是一个估算值。实际中,字符的宽度和大小会因为字体的不同而有所差异,因此,估算的参考值并非精确值,需要根据具体情况进行调整。
2、TabLayout设置字体大小与间距
<!-- 定义TabLayout的字体大小与样式 --> <style name="TabTextSize" parent="TextAppearance.Design.Tab"> <item name="android:textSize">16sp</item> <item name="android:textStyle">bold</item> </style> <!-- 引用定义的TabLayout样式 --> app:tabTextAppearance="@style/TabTextSize"
app:tabMinWidth="0dp" //设置Tab最小宽度,改变Tab的最小宽度。 app:tabMaxWidth="0dp" //设置Tab最大宽度 app:tabPadding="0dp" //设置Tab的Padding app:tabIndicatorFullWidth="false" //指示器不与Tab的宽度相同,其宽度由Tab中的文字宽度决定 app:tabIndicatorFullWidth="true" //指示器与Tab的宽度相同,其宽度由Tab的宽度决定,默认为true
3、WebView设置字体与富文本展示
1.创建一个web.html文件,并创建方法供Android调用。
<html> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"> <style> /*字体引用*/ @font-face { font-family: "custom-font-family"; src: url("file:///android_asset/方正仿宋_GBK.TTF"); } html { padding: 0px; } body { padding: 0px; margin: 0px } img { max-width: 100% !important; height: auto !important; } * { font-family: custom-font-family !important; } </style> <style id="custom-style"></style> </head> <body> <div id="content" style="width: 100%;height: 100%;"></div> </body> <script> //设置富文本到DIV function showContent(contentStr) { document.getElementById("content").innerHTML = contentStr; } //添加自定义样式 function addCustomStyle(styleStr) { var style = document.getElementById('custom-style'); style.innerHTML = style.innerHTML + styleStr; } //设置自定义样式 function setCustomStyle(styleStr) { var style = document.getElementById('custom-style'); style.innerHTML = styleStr; } </script> </html>
2、在原生页面 调用html里面的方法,展示富文本和设置字体
webView.loadUrl("file:///android_asset/web.html") //加载web.html //页面加载完成(onPageFinished方法中)设置字体样式 var styleStr = "@font-face{font-family:'custom-family';src:url('file:///android_asset/方正小标宋_GBK.TTF')}*{font-family:custom-family !important;}" webView.loadUrl("javascript:setCustomStyle(\"${styleStr}\")") var strContent = "富文本" webView.loadUrl("javascript:showContent('${strContent}')")
4、数据库异常,SQLiteBlobTooBigException
异常分析:
SQLiteBlobTooBigException : Row too big to fit into CursorWindow requiredPos=0, totalRows = 1。
在使用sqlite查询时,CursorWindow有2MB的内存大小限制。
SQLite 中字符串或 BLOB 中的最大字节数 通过预处理器宏SQLITE_MAX_LENGTH。默认值 这个宏观是1亿(大概117M)。
解决方案:
1、文件迁移,将数据库存储改为文件存储。
2、数据库存储文件路径,将这些大数据写入文件,然后将其路径存储在数据库中。
3、修改CursorWindow 最大限度。
/** * 使用反射修改CursorWindow */ public void setCursorWindowSize() { try { Field field = CursorWindow.class.getDeclaredField("sCursorWindowSize"); field.setAccessible(true); field.set(null, 100 * 1024 * 1024); //设置100MB } catch (Exception e) { e.printStackTrace(); } }
Cursor cursor = db.query(TABLE, null, "id=?", new String[]{id}, null, null, null); 设置一下CursorWindow的大小即可 CursorWindow cw = new CursorWindow("test", 100 * 1024 * 1024); AbstractWindowedCursor ac = (AbstractWindowedCursor) cursor; ac.setWindow(cw);
5、常用透明度色值表
0% (00)1% (03) 2% (05) 3% (08) 4% (0A) 5% (0D)
6% (0F) 7% (12) 8% (14) 9% (17) 10% (1A)
11% (1C) 12% (1F) 13% (21) 14% (24) 15% (26)
16% (29) 17% (2B) 18% (2E) 19% (30) 20% (33)
21% (36) 22% (38) 23% (3B) 24% (3D) 25% (40)
26% (42) 27% (45) 28% (47) 29% (4A) 30% (4D)
31% (4F) 32% (52) 33% (54) 34% (57) 35% (59)
36% (5C) 37% (5E) 38% (61) 39% (63) 40% (66)
41% (69) 42% (6B) 43% (6E) 44% (70) 45% (73)
46% (75) 47% (78) 48% (7A) 49% (7D) 50% (80)
51% (82) 52% (85) 53% (87) 54% (8A) 55% (8C)
56% (8F) 57% (91) 58% (94) 59% (96) 60% (99)
61% (9C) 62% (9E) 63% (A1) 64% (A3) 65% (A6)
66% (A8) 67% (AB) 68% (AD) 69% (B0) 70% (B3)
71% (B5) 72% (B8) 73% (BA) 74% (BD) 75% (BF)
76% (C2) 77% (C4) 78% (C7) 79% (C9) 80% (CC)
81% (CF) 82% (D1) 83% (D4) 84% (D6) 85% (D9)
86% (DB) 87% (DE) 88% (E0) 89% (E3) 90% (E6)
91% (E8) 92% (EB) 93% (ED) 94% (F0) 95% (F2)
96% (F5) 97% (F7) 98% (FA) 99% (FC) 100%(FF)
6、Android文本放大镜
public static void setMagnifier(Context context,View view) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { Magnifier.Builder builder = new Magnifier.Builder(view); builder.setOverlay(ContextCompat.getDrawable(context, R.drawable.magnifier));//设置覆盖物 builder.setInitialZoom(2);//设置初始放大倍数,与Magnifier的setZoom功能相同 builder.setCornerRadius(100); //设置圆角:0-100 builder.setClippingEnabled(false);//false时放大镜可以滑到手机屏幕外;true时放大镜只能再屏幕内滑动。 builder.setSize(180, 180);//设置放大镜宽高 Magnifier magnifier = builder.build(); magnifier.setZoom(2); //设置放大倍数: view.setOnTouchListener((v, event) -> { switch (event.getActionMasked()) { case MotionEvent.ACTION_DOWN: // Fall through. case MotionEvent.ACTION_MOVE: { final int[] viewPosition = new int[2]; v.getLocationOnScreen(viewPosition); magnifier.show(event.getRawX() - viewPosition[0], event.getRawY() - viewPosition[1]); break; } case MotionEvent.ACTION_CANCEL: // Fall through. case MotionEvent.ACTION_UP: { magnifier.dismiss(); } } return true; }); } } }