Tôi đã tạo EditText bên trong TextInputLayout. Tôi đang thiết lập drawableLeft thành EditText khi chạy trong mã của tôi, nhưng ngay sau khi tôi thêm drawableLeft gợi ý nổi bên trong TextInputLayout dịch chuyển sang phải để lại khoảng trống bằng chiều rộng có thể vẽ được. Nhưng tôi không muốn không gian đó trong gợi ý, vì vậy hãy giúp tôi giải quyết vấn đề này !!Thêm một drawableLeft vào EditText chuyển gợi ý về phía bên phải, nếu edittext nằm trong TextInputlayout
Trả lời
TextInputLayout
sử dụng lớp trợ giúp - CollapsingTextHelper
- để thao tác văn bản gợi ý của nó. Cá thể của trình trợ giúp này là riêng tư và không có thuộc tính nào liên kết với bố cục của nó được hiển thị, vì vậy chúng tôi sẽ cần sử dụng một chút phản ánh để truy cập vào nó. Hơn nữa, các thuộc tính của nó được thiết lập và tính toán lại mỗi khi TextInputLayout
được đặt ra, do đó, nó có ý nghĩa đối với lớp con TextInputLayout
, ghi đè phương thức onLayout()
của nó và thực hiện điều chỉnh của chúng tôi ở đó.
import android.content.Context;
import android.graphics.Rect;
import android.support.design.widget.TextInputLayout;
import android.util.AttributeSet;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class CustomTextInputLayout extends TextInputLayout {
private Object collapsingTextHelper;
private Rect bounds;
private Method recalculateMethod;
public CustomTextInputLayout(Context context) {
this(context, null);
}
public CustomTextInputLayout(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public CustomTextInputLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
adjustBounds();
}
private void init() {
try {
Field cthField = TextInputLayout.class.getDeclaredField("mCollapsingTextHelper");
cthField.setAccessible(true);
collapsingTextHelper = cthField.get(this);
Field boundsField = collapsingTextHelper.getClass().getDeclaredField("mCollapsedBounds");
boundsField.setAccessible(true);
bounds = (Rect) boundsField.get(collapsingTextHelper);
recalculateMethod = collapsingTextHelper.getClass().getDeclaredMethod("recalculate");
}
catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException e) {
collapsingTextHelper = null;
bounds = null;
recalculateMethod = null;
e.printStackTrace();
}
}
private void adjustBounds() {
if (collapsingTextHelper == null) {
return;
}
try {
bounds.left = getEditText().getLeft() + getEditText().getPaddingLeft();
recalculateMethod.invoke(collapsingTextHelper);
}
catch (InvocationTargetException | IllegalAccessException | IllegalArgumentException e) {
e.printStackTrace();
}
}
}
Lớp tùy chỉnh này là thay thế thả cho số TextInputLayout
thông thường và bạn sẽ sử dụng nó theo cùng một cách. Ví dụ:
<com.mycompany.myapp.CustomTextInputLayout
android:id="@+id/text_input_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Model (Example i10, Swift, etc.)"
app:hintTextAppearance="@style/TextLabel">
<android.support.design.widget.TextInputEditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableLeft="@drawable/bmw"
android:text="M Series" />
</com.mycompany.myapp.CustomTextInputLayout>
nó không làm việc bây giờ trả lại một lỗi ** CollapsingTextHelper không được công khai trong android.support.design.widget; không thể truy cập từ gói bên ngoài ** –
Chỉ cần xóa 'CollapsingTextHelper'' import' ở đầu lớp. Nó không thực sự được sử dụng ở bất cứ đâu trong ví dụ. Tôi chỉ quên để làm sạch các hàng nhập khẩu trước khi tôi đăng, rõ ràng. –
Cảm ơn bạn đã làm việc. –
Có, Đây là vấn đề thường gặp mà tôi gặp phải gần đây. Tôi đã giải quyết vấn đề với mã một dòng đơn giản: Đặt khoảng cách giữa gợi ý và drawbleleft
bằng cách sử dụng drawble padding
. Nếu bạn đang thêm drawble vào thời gian chạy, chỉ cần thêm drawblepadding
vào xml trước bàn tay hoặc bạn có thể thêm động vào ô xếp chồng.
editText.setCompoundDrawablePadding(your padding value);
Hãy thử và cho tôi biết. Nó làm việc cho tôi.
- 1. DrawableLeft đang bị chồng chéo với gợi ý bằng cách sử dụng TextInputLayout android
- 2. Cách thêm gợi ý vào EditText với inputType = "numberDecimal"?
- 3. Android: Gợi ý EditText ở một dòng
- 4. Hiển thị gợi ý EditText khi đang chuyển đổi
- 5. EditText gợi ý không hiển thị
- 6. gợi ý EditText android không xuất hiện
- 7. TextInputLayout: màu khác nhau cho các nhãn gợi ý khi không tập trung
- 8. Làm cách nào để tạo một gợi ý trong Android EditText?
- 9. TextInputLayout EditText nextFocusRight không hoạt động như vậy
- 10. Cách thêm Gợi ý vào spinner trong XML
- 11. Làm cách nào để bạn giảm không gian giữa gợi ý editText nổi và hộp editText trong Android?
- 12. Gợi ý EditText hiển thị khoảng trống thừa khi inputType = "textpassword"
- 13. Cuộn EditText bên trong ScrollView
- 14. EditText bên trong TextInputLayout onclick yêu cầu 2 nhấp chuột?! Android
- 15. cuộn EditText bên scrollview
- 16. Thêm EditText cùng với RadioButton
- 17. Tiêu điểm tự động TextInputLayout
- 18. chèn textview bên trong edittext trong android?
- 19. Thay đổi phông chữ của nhãn nổi EditText và TextInputLayout
- 20. Làm cách nào để căn giữa văn bản gợi ý trong EditText trong Android?
- 21. Thêm lề lớn hơn vào EditText trong Android AlertDialog
- 22. Làm thế nào để làm cho gợi ý TextInputLayout màu đỏ cho các trường bắt buộc
- 23. Thay đổi độ dày của Điểm mấu chốt của EditText khi quấn vào TextInputLayout
- 24. Hành vi lạ với selectAllOnFocus khi EditText nằm trong ListView
- 25. EditText: Tránh tập trung vào setText()
- 26. cách thay đổi màu văn bản gợi ý của textinputlayout
- 27. Cuộn bên trong EditText có trong ScrollView
- 28. Đặt kiểu chữ tùy chỉnh trên Gợi ý, TextInputLayout
- 29. EditText không cuộn được bên trong ScrollView
- 30. Thứ tự tab EditText
xin vui lòng gửi xml của bạn –
Sử dụng _setCompoundDrawablePadding_ – Piyush