- Siêu lớp và danh mục iOS/Objective-C
- object-c - -1001 lỗi khi NSURLSession vượt qua httpproxy và /etc/hosts
- java - Nhận địa chỉ url bằng lớp mạng
- ios - Âm thanh không phát trong thông báo đẩy
我有一个 Chỉnh sửa văn bản
Tấ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ản
Khi 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.
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ào
Cung 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.xml
và thêm:
-100
-100
là một giá trị tùy ý. tôi đã kiểm tra
Thông tin biên tập viên
và Id hành động (
IME_ACTION_XXXX
) >= 0.
-100
Có vẻ như là một ứng cử viên sáng giá.
<>
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
.
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
NUM
như hành động, với
?123
tù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.
?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ốiWrapper
và 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.
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.
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.
Chỉnh sửa văn bản
bên cạnh) để chuyển đổi giữa chế độ SỐ và TEXT
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/
Tôi mới làm quen với Java và đây là mã của tôi, if( a.name == b.name && a.displayname == b.displayname && a.linknam
Trong kịch bản bên dưới, tôi có giá trị bool. Dựa trên kết quả, tôi gọi hàm giống hệt nhau, điểm khác biệt duy nhất là số lượng tham số. var myBoolean = ... if (myBoolean) { lấy
Tôi là nhà phát triển C đang làm việc trên C++: Tôi có hiểu chính xác rằng nếu tôi ném một ngoại lệ thì ngăn xếp sẽ thư giãn cho đến khi tìm thấy trình xử lý ngoại lệ đầu tiên không? Có thể mở trình gỡ lỗi trong bất kỳ lần ném nào mà không cần gỡ bỏ (tức là không rời khỏi phạm vi được khai báo hoặc bất kỳ phạm vi nào cao hơn không?
Trong khi sửa một lỗi trong một cơ sở mã khổng lồ, tôi đã quan sát thấy một tình huống kỳ lạ trong đó loại tham chiếu động đã bị thay đổi từ loại Có nguồn gốc thành loại Cơ sở. Tôi đã cung cấp mã tối thiểu để giải thích vấn đề: struct Base { // some
Tôi đang cố gắng mở rộng một mã nhất định trong C# nhưng tôi hơi khó khăn do thiếu kinh nghiệm lập trình. Sử dụng Cộng đồng Visual Studio, tôi đã thử đọc nhiệt độ lõi CPU thông qua bảng điều khiển. Mã sử dụng công tắc/vỏ để tìm tên cụ thể của cảm biến (tức là.
Đây có thể là một câu hỏi triết học. Giả sử bạn đang thực hiện một yêu cầu AJAX tới trang (đây là sử dụng Prototype): new Ajax.Request('target.asp', { Method:"post", pa
Tôi có mã HTML sau nhưng không hoạt động được trên tất cả các trình duyệt: Tôi đang cố chuyển nó sang
Tôi rất mới với Swift. Làm cách nào tôi có thể truy xuất nhận xét từ hàm addPin và có thể sử dụng nhận xét đó trong hành động addLocation của mình (buttonPressed). Tôi đang cố gắng sử dụng cảm ứng áp lực để thêm ghim trên bản đồ, giữa hai
Tôi đã thiết lập Chế độ xem chi tiết trong đó tôi tải một số tệp Nib dựa trên mục được chọn trong bảng của Trình điều khiển chế độ xem gốc. Tôi thấy rằng đối với các lớp của Nibs, viewDidUnloa không bao giờ được gọi
Tôi cần truy cập tệp json một cách linh hoạt và sử dụng đoạn mã sau. Trong ví dụ này, "bpicsel" và "temp" là các biến. Kết quả cuối cùng trông giống như "data[0].extit1" var title="data["+bpicsel+"]
Tôi cần sử dụng dịch vụ WCF của bên thứ ba. Tôi đã định cấu hình các chứng chỉ cần thiết trong kho chứng chỉ của mình nhưng tôi gặp phải ngoại lệ sau khi gọi dịch vụ WCF. Tới https://XXXX.com/AHSharedServices/Custome
Trong một số câu trả lời SO (1, 2), người ta đề xuất rằng không nên kích hoạt trình kích hoạt INSERT nếu có xung đột, TRÊN XUNG ĐỘT KHÔNG LÀM GÌ trong câu lệnh kích hoạt. Có thể tôi hiểu sai, nhưng điều đó dường như không đúng trong các thí nghiệm của tôi. Đây là S của tôi
Nếu được sửa đổi, nó sẽ mang lại ngoại lệ org.hibernate.NonUniqueObjectException. Trong lớp BidderBO của tôi @Override @Transactional(pr
Tôi sử dụng phương thức indexOf() để tìm các đối tượng trong một mảng một cách tinh vi. Cho đến bây giờ tôi đã kiểm tra một số thông tin và thấy rằng mã không hoạt động bình thường. Tôi đã thử đoạn mã trên trong bộ giảm tốc và nó đã hoạt động let tmp = state.find
Giả sử tôi có bảng sau: TẠO BẢNG trò chơi ( GameID INT UNSIGNED NOT NULL, GameType TINYINT UNSIGNED NOT NU
Mã: Alamofire.request(URL(string: imageUrl)!).downloadProgress(closure: { (progress) in
Tôi là một lập trình viên xuất sắc, rất giỏi!