26

Có thể chỉ tạo dấu hoa thị trong gợi ý đỏ khi sử dụng TextInputLayout từ thư viện hỗ trợ thiết kế không? Tôi đã nhìn thấy thông tin về tạo kiểu cho toàn bộ gợi ý, nhưng điều này phức tạp hơn một chút vì chỉ * có màu đỏ chứ không phải toàn bộ thông điệp.Làm thế nào để làm cho gợi ý TextInputLayout màu đỏ cho các trường bắt buộc

Ví dụ về Material Design cho thấy điều này, nhưng thư viện thiết kế dường như không có bất kỳ tùy chọn nào để tạo kiểu theo cách này bằng cách sử dụng TextInputLayout và EditText.

tham khảo: https://www.google.com/design/spec/components/text-fields.html#text-fields-required-fields

Ví dụ (phía trên, với sự tập trung, có dấu hoa thị đỏ; đáy mà không tập trung không có một dấu hoa thị màu đỏ):

Example of hint text with red asterisk

Tôi nhìn vào khung cảnh gợi ý cho một SpannableString (xem ở đây How to get a red asterisk in a <string> entry) trong một OnFocusChangeListener (xem ở đây Having the mandatory symbol to the edit text (red color asterisk) which is inside the textinputlayout), nhưng gợi ý là một CharSequence.

Có cách nào để thực hiện việc này mà không mở rộng TextInputLayout không?

+1

nào bạn tìm thấy bất kỳ giải pháp? – praj

+1

Không, tôi hiện đang có kế hoạch để nó như là cho đến khi thư viện thiết kế hỗ trợ dấu sao màu đỏ. – ProjectJourneyman

+0

Khi tôi sử dụng, thanh không hiển thị cho tôi dưới EditText.Bạn đã làm bất cứ điều gì đặc biệt để làm cho nó hiển thị? – fobbymaster

Trả lời

1
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <!-- Customize your theme here. --> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/black</item> 
</style> 

thay đổi mà bạn theme colorAccent và xem

+0

Xem [ví dụ vật liệu] (https://material.google.com/style/color.html#color-color-schemes), có một chương về điều này. Bạn nên thêm những thông tin đó vào câu trả lời của mình. Nhưng điều này có thể thay đổi nhiều thứ hơn dự kiến. – AxelH

-1

Có nó có thể, vì tôi đang làm điều tương tự trong ứng dụng hiện tại của tôi. và để lấy nét và không lấy nét, bạn phải thực hiện một số logic để xóa dấu hoa thị.

String mm = "Legal first name"; 
Spannable WordtoSpan = new SpannableString(mm); 
WordtoSpan.setSpan(
     new ForegroundColorSpan(Color.parseColor("#e62e6c")), 
     16, 
     mm.length(), 
     Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
WordtoSpan.setSpan(new RelativeSizeSpan(0.9f), 16, mm.length(), 0); 
view.setText(WordtoSpan); 
+0

không thể làm điều đó với một TextInputLayout: https://code.google.com/p/android/issues/detail?id=197889 – Roubachof

-1

Tôi đã trải qua quá trình tương tự và nó làm việc cho tôi

TextView text = (TextView) rootView.findViewById(R.id.name_textview); 

SpannableStringBuilder builder1 = setStarToLabel("Name"); 

text.setText(builder1); 

    @NonNull 
private SpannableStringBuilder setStarToLabel(String text) { 
    String simple = text; 
    String colored = "*"; 
    SpannableStringBuilder builder = new SpannableStringBuilder(); 
    builder.append(simple); 
    int start = builder.length(); 
    builder.append(colored); 
    int end = builder.length(); 
    builder.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    return builder; 
} 
+0

Logic này được áp dụng cho TextView không phải là TextInputLayout được yêu cầu – Jutikorn

0

Ông có thể có thêm một chuỗi spanned Từ Html?

String grey = "Legal first name*"; 
    Spanned redStar; 
    String html = "<string style="color:grey;">Legal first name<span style="color:red;">*</span></string>"; 

    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { 
    redStar = Html.fromHtml(html,Html.FROM_HTML_MODE_LEGACY); 
    } else { 
    redStar = Html.fromHtml(html); 
    } 

Và thay đổi gợi ý khi lấy nét.

textInput.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    public void onFocusChange(View v, boolean hasFocus) { 
    if (hasFocus) 
     myEditText.setHint(redStar.toString); 
    else 
     myEditText.setHint(grey); 
} 
0

Thay đổi TextInputLayout gợi ý bằng cách thêm một postfix bọc trong html:

public void setRequired(boolean required) { 

    componentField.setHint(
    TextUtils.concat(
     componentField.getHint(), 
     Html.fromHtml(
     getContext().getString(
      R.string.required_asterisk)))); 
} 

đang Asterisk nên được lưu trữ trong strings.xml android cho thoát đúng:

<string name = "required_asterisk"><![CDATA[<font color=\'#cc0029\'>&nbsp*</font>]]></string> 
+1

không hoạt động cho tôi. Liệu nó thực sự làm việc cho u? – Jutikorn

3

Vật liệu Thiết kế chỉ định một dấu hoa thị cho các trường bắt buộc là một phần của văn bản gợi ý và có cùng màu (không phải màu đỏ như bạn đã thể hiện trong câu hỏi của bạn).

Trong Kotlin này là thực sự rất đơn giản:

1.Define này phương pháp khuyến nông:

fun TextInputLayout.markRequired() { 
    hint = "$hint *" 
} 

2.Sử dụng nó:

input_first_name.markRequired() 
+0

Xin vui lòng cho tôi android ans của bạn bằng cách sử dụng java. tôi sẽ yêu cầu loại TextInputLayout này bằng cách sử dụng. – mujjuraja

+0

@mujjuraja Đó là xấu xí hơn nhiều trong Java, tôi khuyên bạn nên [try.kotl.in] (https://try.kotl.in), nhưng đây là những gì bạn có thể làm: 'inputFirstName.setHint (inputFirstName.getHint() +" * ")' –

Các vấn đề liên quan