gpt4 book ai didi

Android 在编辑文本字段中输入之前捕获扫描数据

转载 作者:行者123 更新时间:2023-11-30 00:23:01 26 4
gpt4 key购买 nike

实际发生的是设备在扫描后根据它是否设置为发送标签或输入发送 2 个输入或标签。

我使用 xamarin Android 命名空间构建

我已经尝试了所有可能的方法,我已经将我的 fragment 设置为文本观察器

public class SearchFragment : BaseFragment, IDialogInterfaceOnDismissListener, ITextWatcher

并设置监听器

this._theEditText.AddTextChangedListener(this);

并在 BeforeTextChanged 事件中设置它,但是无法从 char 序列中获取值,尽管在测试用例中扫描有 8 个字符,+2 表示 2 个回车键,但它显示为 8。

    public void BeforeTextChanged(ICharSequence s, int start, int count, int after)
{
this._scanCount = _scanCount + (after - start);
if (this._scanCount > 4)
{
string text = s.ToString();
//need remove carriage returns and line feeds here if exist
//then add single carriage return or advance to next field
}

if (this._scanTimer != null) this._scanTimer.Dispose();
this._scanTimer = new Timer(delegate (object state)
{
this._scanCount = 0;
this._scanTimer = null;
}, false, 100, 0);
}

我使用的下一个方法是捕获按键并使用内置在 beforetextchanged 事件处理程序中的 editText(我单独使用了所有这些不同的方法,而不是一起使用)

this._theEditText.KeyPress += EditText_KeyPress;
this._theEditText.BeforeTextChanged += EditText_BeforeTextChanged;

在按键事件中,我得到了一堆标签和 f4(我可能会补充说,这些标签并没有足够奇怪地推进该领域)

再次使用 BeforeTextChanged 事件我无法获取字符序列,尽管 8 之前和之后存在差异(再次在末尾输入不算数)尽管实际文本 e.Text 是 8 ""

    private void EditText_BeforeTextChanged(object sender, TextChangedEventArgs e)
{
this._scanCount = _scanCount + (e.AfterCount - e.BeforeCount);
if (this._scanCount > 4)
{
SpannableStringBuilder stringBuilder = (SpannableStringBuilder)e.Text;

((SpannableStringBuilder)e.Text).ToString();
}

if (this._scanTimer != null) this._scanTimer.Dispose();
this._scanTimer = new Timer(delegate (object state)
{
this._scanCount = 0;
this._scanTimer = null;
}, false, 100, 0);
}

最佳答案

是的,键盘扫描器和 Android 混在一起一团糟。我不得不处理的扫描器过去常常发送 Down+Enter 作为扫描完成的标志。这是有效的 Java 代码(我相信将其转换为 C# 并将 Down/Enter 更改为您的两个键不会有任何问题)

public class ScannerView extends View implements View.OnKeyListener {
private StringBuilder scannedCode = new StringBuilder();
private Callback scanCallback;


public void setCallback(Callback scanCallback) {
this.scanCallback = scanCallback;
}

public ScannerView(Context context) {
super(context);
init();
}

public ScannerView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}

public ScannerView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public ScannerView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}

private void init() {
setFocusable(true);
setFocusableInTouchMode(true);
requestFocus();
setOnKeyListener(this);
}

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
boolean consumed = false;
if (event.getAction() != KeyEvent.ACTION_UP) {
return consumed;
}

switch (keyCode) {
case KeyEvent.KEYCODE_0:
case KeyEvent.KEYCODE_1:
case KeyEvent.KEYCODE_2:
case KeyEvent.KEYCODE_3:
case KeyEvent.KEYCODE_4:
case KeyEvent.KEYCODE_5:
case KeyEvent.KEYCODE_6:
case KeyEvent.KEYCODE_7:
case KeyEvent.KEYCODE_8:
case KeyEvent.KEYCODE_9:
scannedCode.append(keyCode - 7);
consumed = true;
break;
case KeyEvent.KEYCODE_ENTER:
if (scanCallback != null) {
scanCallback.onBarcodeScanned(scannedCode.toString());
}
scannedCode = new StringBuilder();
consumed = true;
break;

case KeyEvent.KEYCODE_DPAD_DOWN:
consumed = true;
break;
}

return consumed;
}

interface Callback {
void onBarcodeScanned(String barCode);
}
}

据我了解,这与您使用扫描仪获得良好的零售式体验一样接近。然后您可以使用回调并将文本设置为您需要的任何编辑或处理它。请记住始终将焦点设置到您的扫描 View :父生命周期事件、它自己的焦点更改回调等等,您将在测试时找出其余部分。

关于Android 在编辑文本字段中输入之前捕获扫描数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45925372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com