Вы должны зафиксировать текст префикса в EditText
, который нельзя редактировать, и пользователь может редактировать текст только после base-url (как после https://wwww.mysite.com/
).
Итак, вы должны выполнить следующие шаги
- Префикс основного URL к EditText и сделать его недоступным для редактирования
- Разрешить пользователю вводить часть URL
- Подтвердите ввод с помощью
Patterns.WEB_URL.matcher(inputUrl).matches()
для действительного URL. Вы можете добавить эту проверку в TextChange EditText или по нажатию кнопки.
Ниже приведен пользовательский код EditText, который вы можете использовать напрямую
public class UrlEditText extends AppCompatEditText {
float mLeftPadding = -1;
public UrlEditText(Context context) {
super(context);
}
public UrlEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public UrlEditText(Context context, AttributeSet attrs,
int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec,
int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
initPrefix();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
String prefix = (String) getTag();
canvas.drawText(prefix, mLeftPadding,
getLineBounds(0, null), getPaint());
}
private void initPrefix() {
if (mLeftPadding == -1) {
String prefix = (String) getTag();
float[] widths = new float[prefix.length()];
getPaint().getTextWidths(prefix, widths);
float textWidth = 0;
for (float w : widths) {
textWidth += w;
}
mLeftPadding = getCompoundPaddingLeft();
setPadding((int) (textWidth + mLeftPadding),
getPaddingRight(), getPaddingTop(),
getPaddingBottom());
}
}
}
и в макете XML-файла это будет выглядеть как
<com.path_of_custom_view.UrlEditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:tag="https://wwww.mysite.com/"
android:text="helloworld" />
Вместо использования android:tag
вы можете определить пользовательский атрибут для этого текста редактирования.
И для проверки ввода вы можете проверить его как
String enteredUrl = textField.getText().toString();
if (Patterns.WEB_URL.matcher(enteredUrl).matches()) {
// Valid url
} else {
// Invalid url
}