cuốn sách gpt4 ai đã làm

Làm cách nào để hiển thị bàn phím Android ở chế độ ký hiệu theo mặc định?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 21:23:28 41 4
mua khóa gpt4 Nike

我有一个 Chỉnh sửa văn bảnTất nhiên, nếu bạn nhấp vào nó, bàn phím Android sẽ xuất hiện, cho phép người dùng nhập văn bản. Theo như tôi biết, tất cả bàn phím phần mềm Android (ít nhất) đều có chế độ theo thứ tự bảng chữ cái ( ABC ) và chế độ ký hiệu ( ?123 ). Chế độ xem mặc định của họ là chế độ theo thứ tự bảng chữ cái.

Bây giờ khi bàn phím được hiển thị Chỉnh sửa văn bảnKhi nhấp vào thành phần tôi muốn chế độ biểu tượng hiển thị theo mặc định. Người dùng vẫn có thể chuyển sang chế độ theo bảng chữ cái.

nhập mô tả hình ảnh ở đây

Có cách nào để đạt được điều này? Nếu có thì làm thế nào?

câu trả lời hay nhất

Tôi đăng bài này vì tôi không nghĩ bất kỳ câu trả lời nào thực sự giải quyết được vấn đề. Ảnh chụp màn hình trong câu hỏi không tương ứng với trạng thái mặc định của Loại đầu vào cụ thể. Do đó, việc chuyển đổi Loại đầu vào sẽ không cung cấp cho bạn bố cục trong ảnh chụp màn hình.
(Dựa trên nghiên cứu của tôi...)
Hỗ trợ cho đầu vào tượng trưng không phụ thuộc vào bất kỳ hợp đồng nào. Các biểu tượng có thể được bỏ qua một cách dễ dàng khi tạo biểu tượng của riêng bạn Phương thức nhập liệu .Ngoài ra, họ có thể thêm hỗ trợ phân trang để cung cấp quyền truy cập vào hàng trăm biểu tượng. Điều này có thể tuân theo một hợp đồng? Có lẽ. Tuy nhiên, không phải hiện tại.
Khung phương thức nhập không cho phép giao tiếp trực tiếp giữa máy khách và IME. Mọi liên lạc đều đi qua Trình quản lý phương thức đầu vào chỉ đạo. hoặc thông qua Kết nối đầu vào - Kênh một chiều. sử dụng ?123 Tuy nhiên, việc chuyển sang biểu tượng là một sự kiện nội bộ - không phải là trạng thái/hành động được xác định. Ứng dụng khách không thể chuyển sang nó. Không có API công khai (hoặc ẩn) để đạt được điều này.Loại đầu vàoĐại diện cho một cái gì đó hoàn toàn khác với IME. Không chắc chắn tại sao mọi người khuyên bạn nên sử dụng nó. Tất nhiên bạn có thể thấy rằng một điều cụ thể Loại đầu vàoCung cấp hầu hết các key cần thiết .nhưng điều này khác với hiển thị [ing] bàn phím Android với chế độ ký hiệu theo mặc định. không giống nhau
Giải pháp khả thi :
Chúng tôi sẽ tạo một tùy chỉnh Chỉnh sửa văn bản .Chúng tôi không cần phải làm vậy. Nó chỉ đặt mọi thứ vào một nơi và cứu chúng ta khỏi cơn ác mộng sao chép-dán.

lớp công khai CusEditText mở rộng EditText {

int cuối cùng riêng tư mDefinedActionId;

public CusEditText(Ngữ cảnh, AttrsAttrs) {
super(bối cảnh, attrs);

// Tương ứng với giá trị 'android:imeActionId'
mDefinedActionId = getResources().getInteger(R.integer.d xác địnhActionId);

setOnEditorActionListener(OnEditorActionListener mới() {

@Ghi đè
boolean công khai onEditorAction(TextView v, int actionId, sự kiện KeyEvent) {
Log.i("CusEditText", "onEditorAction, actionId = " + actionId);

// Chỉ bận tâm nếu (...)
if (actionId == mDefinedActionId) {

// Kiểm tra xem kiểu đầu vào hiện tại có phải là SỐ không
if ((getInputType() & inputType.TYPE_CLASS_NUMBER) != 0) {
// Chuyển đổi
setImeActionLabel("NUM", mDefinedActionId);
setInputType(InputType.TYPE_CLASS_TEXT);
} khác {
// Kiểu đầu vào hiện tại là TEXT // Chuyển đổi
setImeActionLabel("ABC", mDefinedActionId);
setInputType(InputType.TYPE_CLASS_NUMBER);
}

// Chúng tôi đã xử lý việc này
trả về đúng sự thật;
}

// Hãy để người khác lo việc này
trả về sai;
}
});
}
}
Tiếp theo, chúng ta cần xác định Id hành động được xác định .open hoặc tạo res/giá trị/số nguyên.xmlvà thêm:
-100
-100là một giá trị tùy ý. tôi đã kiểm tra Thông tin biên tập viênvà Id hành động ( IME_ACTION_XXXX ) >= 0. -100Có vẻ như là một ứng cử viên sáng giá.
Trong xml bố cục của bạn sẽ trông như thế này:
<>
android:layout_width="blah"
android:layout_height="blah"
android:inputType="số"
android:imeActionId="@integer/d xác địnhActionId"
android:imeActionLabel="ABC"/>


Không có gì nhiều để giải thích. IME sẽ bắt đầu ở chế độ SỐ. nó sẽ hiển thị ABC Thay vì biểu tượng dấu kiểm. Khi được nhấp vào, chúng tôi sẽ chặn actionId và chuyển đổi giữa đầu vào SỐ và VĂN BẢN. chúng tôi đang sử dụng setInputType(...)Bởi vì nó không chỉ cập nhật Loại đầu vào , nó cũng khởi động lại IME với những thay đổi. setRawInputType(...)Chỉ cập nhật Loại đầu vào .
câu hỏi :
Như bạn biết, đây không thực sự là một giải pháp. Nếu người dùng đóng bàn phím ở chế độ TEXT (sử dụng mặt sau nút), khi họ mở lại bàn phím, bàn phím sẽ vẫn ở chế độ TEXT. Để vào chế độ SỐ, người dùng phải nhấp vào NUM .Ngoài ra, ở chế độ văn bản, người dùng sẽ thấy NUMnhư hành động, với ?123tùy chọn. Điều này không phá vỡ bất cứ điều gì, nhưng nó ảnh hưởng đến trải nghiệm người dùng.
Chúng ta không thể làm được gì ?123Được hiển thị ở chế độ văn bản vì những lý do được liệt kê ở trên. Tuy nhiên, chúng ta có thể cố gắng đảm bảo rằng bàn phím luôn được mở ở chế độ SỐ. Tôi sẽ cung cấp một bản phác thảo sơ bộ về cách chúng tôi sẽ thực hiện việc này. Điều đó không đơn giản vì chúng tôi (các nhà phát triển) không biết về các sự kiện như đóng hoặc mở bàn phím. gia hạn CusChỉnh sửaVăn bản :
lớp công khai CusEditText mở rộng EditText {

int cuối cùng riêng tư mDefinedActionId;
riêng tư dài mLastEditorActionTime = 0L;

public CusEditText(Ngữ cảnh, AttrsAttrs) {
super(bối cảnh, attrs);

// Tương ứng với giá trị 'android:imeActionId'
mDefinedActionId = getResources().getInteger(R.integer.d xác địnhActionId);

setOnEditorActionListener(OnEditorActionListener mới() {

@Ghi đè
boolean công khai onEditorAction(TextView v, int actionId, sự kiện KeyEvent) {
Log.i("CusEditText", "onEditorAction, actionId = " + actionId);

// Chỉ bận tâm nếu (...)
if (actionId == mDefinedActionId) {

// setInputType(...) sẽ khởi động lại IME
// và gọi finishComposingText()
// xem bên dưới
mLastEditorActionTime = SystemClock.elapsedRealtime();

// Kiểm tra xem kiểu đầu vào hiện tại có phải là SỐ không
if ((getInputType() & inputType.TYPE_CLASS_NUMBER) != 0) {
// Chuyển đổi
setImeActionLabel("NUM", mDefinedActionId);
setInputType(InputType.TYPE_CLASS_TEXT);
} khác {
// Kiểu đầu vào hiện tại là TEXT // Chuyển đổi
setImeActionLabel("ABC", mDefinedActionId);
setInputType(InputType.TYPE_CLASS_NUMBER);
}

// Chúng tôi đã xử lý việc này
trả về đúng sự thật;
}

// Hãy để người khác lo việc này
trả về sai;
}
});
}

@Ghi đè
public inputConnection onCreateInputConnection(EditorInfo outAttrs) {
Kết nối đầu vào inputConnection = super.onCreateInputConnection(outAttrs);

trả về CusInputConnectionWrapper mới (inputConnection, false);
}

lớp riêng CusInputConnectionWrapper mở rộng inputConnectionWrapper {
CusInputConnectionWrapper riêng tư (mục tiêu InputConnection, có thể thay đổi boolean) {
super(mục tiêu, có thể thay đổi);
}

@Ghi đè
kết thúc boolean công khaiComposingText() {
Log.i("CICW", "finishComposingText");

// Bỏ qua finishComposingText trong 1 giây (1000L)
if (SystemClock.elapsedRealtime() - mLastEditorActionTime > 1000L) {
if ((getInputType() & inputType.TYPE_CLASS_NUMBER) == 0) {
// Kết nối đầu vào không còn hợp lệ.
// Chuyển về NUMBER nếu cần
setImeActionLabel("ABC", mDefinedActionId);
setInputType(InputType.TYPE_CLASS_NUMBER);
}
}

trả về super.finishComposingText();
}
}
}
Một lần nữa, mã này đã tự giải thích. Chúng tôi đã tạo ra một Đầu vàoKết nốiWrappervà lắng nghe kết thúcComposingText()gọi lại. nếu chúng ta CHỮ Chuyển đổi thủ công giữa CON SỐ , chúng tôi sử dụng cờ vì kết thúcComposingText()sẽ được gọi tự động. Nếu không, chúng tôi sẽ kiểm tra xem loại đầu vào có được đặt thành không CHỮvà thay đổi nó thành CON SỐ .Tôi không chắc liệu kết thúcComposingText()là cách chính xác để diễn giải việc đóng/mở bàn phím. Đã thử nghiệm trên API 21, android vanilla, điều này dường như hoạt động. Sẽ cần nhiều thử nghiệm hơn.
Tôi thực sự hy vọng ai đó có thể đưa ra giải pháp tốt hơn, mạnh mẽ hơn giải pháp này - hoặc sửa đổi cách giải quyết của tôi để nó trông không giống như vậy.
bản tóm tắt
Nhiệm vụ trước mắt là cung cấp chức năng xung quanh công cụ phương thức nhập (IME) hiện có để chuyển đổi giữa chế độ nhập SỐ và VĂN BẢN. Cách đầu tiên là sử dụng imeActionLabel & imeActionId trong cơ chế chuyển mạch. Phương pháp này hoạt động với bàn phím của Google ( đây là imeActionLabel ), nhưng không dành cho Samsung - imActionLabel không hiển thị được trong ảnh chân dung (KHÔNG chiết xuất ). Một cách giải quyết khác có thể là đưa nút chuyển đổi vào giao diện người dùng của chính ứng dụng.
Ngay cả khi sử dụng bàn phím của Google, khi chế độ chuyển về SỐ sau khi nhập chữ cái thì chữ cái (văn bản) cũng không thể hiển thị được. Vấn đề này đã được giải quyết bằng cờ flagNoExtractUi Khắc phục (ít nhất là trên các thiết bị đã thử nghiệm) ngăn IME chuyển sang chế độ toàn màn hình theo hướng ngang.
giải pháp cuối cùng (Đang triển khai và thử nghiệm)
  • IME bắt đầu ở chế độ nhập số (95% trường hợp sử dụng liên quan đến nhập số)
  • Một nút được thêm vào giao diện người dùng của ứng dụng (trong Chỉnh sửa văn bản bên cạnh) để chuyển đổi giữa chế độ SỐ và TEXT
  • Người dùng có thể chuyển từ SỐ sang TEXT mà không có bất kỳ hạn chế nào. Việc chuyển từ TEXT trở lại NUMBER yêu cầu không thêm chữ cái nào.
  • Kiểu đầu vào vẫn tồn tại giữa lúc đóng và mở lại bàn phím. Ví dụ: Nếu người dùng chuyển sang chế độ TEXT và đóng bàn phím lại thì nó sẽ mở ở chế độ TEXT. Loại đầu vào không được đặt lại.

  • Để biết thêm thông tin về những gì cần thử, hãy xem chủ đề thảo luận này .
    ảnh chụp màn hình
    Mặc định(NUMBER) :
    nhập mô tả hình ảnh ở đây
    chuyển sang văn bản :
    nhập mô tả hình ảnh ở đây
    Link video đã ghi

    Làm cách nào để hiển thị bàn phím Android ở chế độ ký hiệu theo mặc định? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/25219855/

    41 4 0
    Chứng chỉ ICP Bắc Kinh số 000000
    Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
    Xem sitemap của VNExpress