Android技术笔记

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;
                });
            }
        }
    }

7、

8、

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值