写一个Android输入法02——候选窗、转换

本文介绍了如何在Android中开发输入法,特别是创建候选窗口和处理按键响应。通过覆盖`onCreateCandidateView()`和`onKey()`方法实现自定义候选窗口,并在`onKey()`中响应按键事件,展示和上屏候选字串。同时,文章提到了输入法会话的生命周期,包括`onStartInput()`和`onCreateInputView()`等关键方法的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇介绍了完成Android输入法的最小化步骤,它只能将按键对应的字符上屏。一般的东亚语言都有一个转换的过程,比如汉语输入拼音,需要由拼音转成汉字再上屏。本文将在前文基础上加入完成转换过程所必需的候选窗。本文代码可参见https://github.com/palanceli/AndroidXXIME/tree/v2。

如下图所示,用红框框出来的窗体是候选窗,其内的字符创叫做候选串,点击候选窗使之进入输入控件叫做上屏。没有输入的时候隐藏候选窗,当输入字串还未上屏时显示候选窗:

引入候选窗需要完成两个步骤:

一、创建CandidateView,该窗口需要覆盖如下两个方法,已完成自绘:

  • onDraw(Canvas canvas);
  • onMeasure(int widthMeasureSpec, int heightMeasureSpec);

二、覆盖AndroidXXIME类的如下两个方法:

  • onCreateCandidateView();

  在该方法中创建CandidateView。

  • onKey(int  primaryCode, int [] keyCodes);

  在该方法中响应按键消息,如:当按下字母键,则展现候选窗以及候选字串;当按下空格,则上屏候选字串,等等。    

 


 

创建CandidateView

    public CandidateView(Context context) {
        super(context);
        Log.d(this.getClass().toString(), "CandidateView: ");

        // 设置前景、背景色、字体、字号
        Resources r = context.getResources();

        setBackgroundColor(getResources().getColor(R.color.candidate_background, null));

        mColorNormal = r.getColor(R.color.candidate_normal, null);
        mVerticalPadding = r.getDimensionPixelSize(R.dimen.candidate_vertical_padding);

        mPaint = new Paint();
        mPaint.setColor(mColorNormal);
        mPaint.setAntiAlias(true);
        mPaint.setTextSize(r.getDimensionPixelSize(R.dimen.candidate_font_height));
        mPaint.setStrokeWidth(0);

        setWillNotDraw(false);  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值