安卓训练-开始-添加操作栏-覆盖模式的操作栏

本文介绍如何在Android应用中实现操作栏覆盖模式,避免因操作栏显示与隐藏导致的布局重绘,提供流畅用户体验。文中详细解释了不同Android版本的支持情况及自定义主题的方法。

覆盖模式的操作栏

默认情况下,操作栏出现在你的 activity 窗口的顶部,会稍微减少你的 activity 剩余部分的可用空间。在用户交互过程中,如果你想要隐藏和显示操作栏,你可以调用ActionBar 上的hide()show()。但是,这会导致你的 activity 根据它的新的大小重算并重绘布局。

图 1. 相册的覆盖模式的操作栏。

为了避免在操作栏隐藏和显示时调整你的布局的大小,你可以为操作栏启用覆盖模式(overlay mode)。在覆盖模式下,你的 activity 布局使用所有可用空间,就像操作栏操作栏不在那里,系统在你的布局的前面绘制操作栏。这掩盖了布局顶部部分,但是现在当操作栏隐藏或出现时,系统不需要调整你的布局的大小,可以无缝地转变。

技巧:如果你想要你的布局在操作栏后面部分可见,你要为操作栏创建一个有部分透明的背景自定义样式,像 图 1 显示的那样。 更多关于怎样为操作栏定义背景的信息,参见为操作栏添加样式

启用覆盖模式


为了让操作栏启用覆盖模式,你需要通过继承一个已存在的操作栏主题来创建一个自定义的主题,并把 android:windowActionBarOverlay 属性设为 true

只支持安卓 3.0或更高版本

如果你的 minSdkVersion 设置为11 或更高,你的自定义主题需要使用 Theme.Holo 主题(或它的一个子孙)作为你的父主题。例如:

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme"
           parent="@android:style/Theme.Holo">
        <item name="android:windowActionBarOverlay">true</item>
    </style>
</resources>

支持安卓 2.1或更高版本

如果你的为了兼容运行比安卓 3.0低版本的设备而使用支持库,你的自定义主题需要使用 Theme.AppCompat 主题(或它的一个子孙)作为你的父主题。例如:

<resources>
    <!-- the theme applied to the application or activity -->
    <style name="CustomActionBarTheme" parent="@android:style/Theme.<strong>AppCompat</strong>">
        <item name="android:windowActionBarOverlay">true</item>

        <!-- Support library compatibility -->
        <item name="windowActionBarOverlay">true</item>
    </style>
</resources>

还需注意到,这个主题包含 windowActionBarOverlay 的两种定义方式:一种有android: 前缀而另一种没有。有 android: 前缀的用于平台有这个样式的安卓版本,没有前缀的用于从支持库中读取样式的老版本。

指定布局的顶部外边距


当操作栏是覆盖模式时,它肯定掩盖一些你的布局中需要保持可见的一部分。为了确保这些项在所有时候都在操作栏的下面,你需要使用 actionBarSize 指定的高度给视图顶部添加外边距或内边距。例如:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?android:attr/actionBarSize">
    ...
</RelativeLayout>

如果你为操作栏使用支持库,你需要删除 android: 前缀。例如:

<!-- Support library compatibility -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="?attr/actionBarSize">
    ...
</RelativeLayout>

在这种情况下,没有前缀的值 ?attr/actionBarSize 在所有版本上都可以工作,包括安装 3.0或更高版本。

 
 
<think>好的,我现在需要帮助用户了解如何使用Tesseract-OCR进行光学字符识别,特别是教程和示例。首先,我得回忆一下用户提供的引用内容,确保回答准确。用户提到了四个引用,其中引用[2]提到了iOS的使用教程,引用[3]和[4]涉及安装和语言库下载,引用[1]是概述。 首先,我应该按照用户的要求,结构清晰地分步骤说明。可能需要从安装开始,因为这是第一步。根据引用[3]和[4],用户可以从GitCode或Google Code下载Tesseract。特别是引用[4]提到3.01版本支持中文,所以需要强调版本选择。安装后需要下载语言包,引用[3]的项目地址可能有用,或者引用[4]中的备用链接。 接下来是命令行使用,用户可能想知道基本命令。引用[4]提到了使用tesseract.exe处理图像,所以应该给出命令示例,比如输入文件、输出和语言参数。然后,Python集成的部分,可能需要提到pytesseract库,引用[2]提到与OpenCV结合使用,可以给出安装命令和示例代码,展示如何处理图像并提取文本。 iOS应用部分,引用[2]提到使用Tesseract-OCR-iOS,需要说明通过CocoaPods安装,并给出Swift的示例代码,展示如何设置引擎和处理图像。此外,优化识别准确率的部分,可以结合引用[2]中的建议,比如图像预处理和使用Core ML,这里可能需要提到OpenCV的应用,比如调整对比度、二值化等。 在注意事项中,需要提到图像质量、语言包正确性、多语言识别时的参数设置,以及可能的后处理。最后,生成相关问题,确保覆盖安装、命令行使用、Python集成、优化、多语言处理和应用场景。 需要检查是否符合系统指令:行内数学公式用$,不过这里可能用不上,但要注意其他格式要求。独立公式可能也不需要,但确保LaTeX正确。使用中文回答,结构清晰,引用标识放在相关段落末尾。比如提到iOS教程时引用[2],安装步骤引用[3]和[4]。 现在整理这些思路,确保每个步骤都有对应的引用支持,并且语言自然。可能还需要验证每个步骤是否正确,比如安装命令是否准确,代码示例是否可行。特别是引用[4]中的安装路径和语言包配置是否正确。此外,用户可能需要知道如何处理常见问题,比如图像质量不佳时的优化方法,这也是注意事项的一部分。 最后,确保相关问题覆盖用户可能感兴趣的方面,如安装问题、优化技巧、多语言支持等。这样用户可以根据回答进一步探索相关内容。</think>### Tesseract-OCR 使用教程及示例 #### 一、环境安装与配置 1. **下载安装包** Tesseract-OCR 支持多平台,Windows 用户可从 [GitCode 资源库](https://gitcode.com/Resource-Bundle-Collection/b88e3) 或 [Google Code 存档](https://code.google.com/p/tesseract-ocr/downloads/list) 下载安装程序。建议选择 **3.01 及以上版本**,因其支持中文识别[^4]。 2. **安装语言库** 安装完成后,需下载对应语言的训练数据文件(`.traineddata`)。例如: - 中文语言包:`chi_sim.traineddata`(简体中文)、`chi_tra.traineddata`(繁体中文) - 英文语言包:`eng.traineddata` 将文件放入 Tesseract-OCR 安装目录的 `tessdata` 文件夹中[^3]。 --- #### 二、基础命令行使用 通过命令行调用 Tesseract 进行文字识别,语法为: ```bash tesseract <输入图像路径> <输出文件名> -l <语言代码> ``` **示例**: ```bash tesseract input.png output -l chi_sim ``` 此命令将识别 `input.png` 中的简体中文文本,结果保存到 `output.txt`。 --- #### 三、Python 集成示例 1. **安装依赖库** 使用 `pytesseract` 库调用 Tesseract: ```bash pip install pytesseract pillow ``` 2. **代码示例** ```python from PIL import Image import pytesseract # 设置 Tesseract 路径(根据实际安装位置修改) pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe' # 读取图像并识别文本 image = Image.open('input.png') text = pytesseract.image_to_string(image, lang='chi_sim') print(text) ``` 输出结果为图像中的识别文本[^2]。 --- #### 四、iOS 应用集成(Swift) 1. **添加依赖** 通过 CocoaPods 安装 `TesseractOCRiOS`: ```ruby pod 'TesseractOCRiOS', '~> 4.0' ``` 2. **代码示例** ```swift import UIKit import TesseractOCR class ViewController: UIViewController { func recognizeText(from image: UIImage) { let tesseract = G8Tesseract(language: "chi_sim+eng") tesseract?.image = image tesseract?.recognize() print(tesseract?.recognizedText ?? "识别失败") } } ``` 此代码支持中英文混合识别[^2]。 --- #### 五、优化识别准确率 1. **图像预处理** - 使用 OpenCV 调整对比度、降噪或二值化 ```python import cv2 image = cv2.imread('input.png') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) _, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) ``` - 确保图像分辨率 ≥ 300 DPI 2. **多语言混合识别** 指定多个语言参数,例如 `-l chi_sim+eng`。 --- #### 注意事项 1. 图像质量直接影响识别效果,建议使用清晰、无倾斜的文本图像。 2. 若识别结果包含乱码,检查语言包是否安装正确。 3. 对于复杂排版,可通过 `--psm` 参数调整页面分割模式--- §§ 1. Tesseract-OCR 如何解决低对比度图像的识别问题? 2. 如何训练自定义语言模型以提升特定场景的识别准确率? 3. Tesseract-OCR 在识别手写字体时有哪些局限性? 4. 如何在 Android 平台上集成 Tesseract-OCR? 5. Tesseract-OCR 与深度学习 OCR 模型(如 PaddleOCR)的性能对比如何?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值