我在TextInputLayout中創建了一個EditText。我在我的代碼中在運行時將一個drawableLeft設置爲一個EditText,但是一旦我添加drawableLeft,TextInputLayout中的浮動提示就會向右移動,而留出等於可繪製寬度的空間。但我不想在提示空間,所以幫我解決這個問題!如果edittext位於TextInputlayout中,將一個drawableLeft添加到EditText將提示移向右側
回答
TextInputLayout
使用輔助類 - CollapsingTextHelper
- 來操作其提示文本。這個幫助器的實例是私有的,並且沒有任何與其佈局相關的屬性暴露出來,所以我們需要使用一點反射來訪問它。此外,每次佈局TextInputLayout
時都會對其屬性進行設置和重新計算,因此子類TextInputLayout
的子類很有用,覆蓋其方法onLayout()
,並在那裏進行調整。
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();
}
}
}
這種定製類是一個下拉更換爲正規TextInputLayout
,你會用同樣的方式。例如:
<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>
它不是現在正在返回一個錯誤** CollapsingTextHelper不是公衆android.support.design.widget;無法從外部包中訪問** –
只需在課程頂部刪除「CollapsingTextHelper」導入即可。它在示例中並未實際使用。顯然,我只是在發佈之前忘記清理進口產品。 –
感謝它的工作。 –
是的,它是我最近遇到的一個常見問題。我用簡單的一行代碼解決了這個問題: 使用drawble padding
在提示和drawbleleft
之間填充填充。 如果您在運行時添加drawable,只需在手邊添加drawblepadding
即可,或者您可以動態添加drawable填充。
editText.setCompoundDrawablePadding(your padding value);
試試吧,讓我知道。它爲我工作。
- 1. TextInputLayout和EditText提示可見
- 2. 提示對齊密碼右側EditText
- 3. 將EditText中的文本移動到右側
- 4. 將TextInputLayout提示位置更改爲右
- 5. Edittext如何將字符移動到左側如果填充
- 6. 如何使用inputType =「numberDecimal」將提示添加到EditText中?
- 7. 將兩個edittext值加在一起並在另一個edittext中顯示結果
- 8. 將焦點從一個EditText移動到另一個EditText
- 9. Android將光標從一個EditText移動到另一個EditText?
- 10. 工具欄TextInputLayout EditText - 丟失提示
- 11. 如何將EditText添加到ListView中
- 12. 安卓:在EditText上的右側這是在TextInputLayout
- 13. 如何將一個edittext的結果傳遞給另一個edittext?
- 14. 如何將EditText添加到DialogFragment?
- 15. 如何在EditText中添加HintText和Drawableleft之間的空格
- 16. Android如果點擊字段中的任何字母,將光標從一個EditText移動到另一個EditText?
- 17. Android在TabWidget的左側添加一個圖像並在其右側添加一個edittext權限?
- 18. 將Edittext動態添加到現有EditText下的相對佈局
- 19. 將EditText動態添加到ListView行
- 20. 將文字圖像添加到EditText
- 21. 將EditText添加到警報對話框。
- 22. 將EditText添加到LoginActivity模板
- 23. 將EditText添加到對話框
- 24. Android:將新的edittext添加到新行
- 25. 將edittext添加到自定義視圖
- 26. 將editText添加到自定義視圖
- 27. Android:嘗試將setText添加到EditText
- 28. 如何將iframe移向右側?
- 29. 密碼edittext提示右側文字對齊
- 30. 將光標設置在EditText的右側,使用HINT Gravity居中
請發表您的XML –
使用_setCompoundDrawablePadding_ – Piyush