2012-05-05 32 views
30

Tôi có một số văn bản trong đơn đăng ký của tôi cho biết trong trường hợp bạn cần thêm trợ giúp, vui lòng gửi email cho chúng tôi và đây là địa chỉ email, blah, blah.Cách tạo địa chỉ email có thể nhấp?

Nhưng tôi muốn họ có thể nhấp vào liên kết email và mở ứng dụng email khách của họ. Điều đó có thể không? Hay đó là thực hành xấu?

Nếu thực hành hợp lý, làm thế nào nó có thể được thực hiện?

Trả lời

74

Đây là một yêu cầu rất hợp lý và lớp Linkify sẽ biến mỗi địa chỉ email vào một liên kết thích hợp cho bạn. Đơn giản chỉ cần thêm thuộc tính autoLink to XML của bạn:

<TextView 
    ... 
    android:autoLink="email" /> 
+1

Giải pháp tốt nhất ... sẽ tự động tìm địa chỉ email trong 'TextView' của bạn, vì vậy bạn có thể đặt một đoạn văn bản nếu bạn muốn và nó sẽ tự động chuyển đổi tất cả địa chỉ email. –

4

Bạn cần phải bắn một ý định trong onClickListener của bạn:

Intent intent = new Intent(Intent.ACTION_SEND); 
intent.setType("text/plain"); // send email as plain text 
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { "[email protected]" }); 
intent.putExtra(Intent.EXTRA_SUBJECT, "subject"); 
intent.putExtra(Intent.EXTRA_TEXT, "mail body"); 
startActivity(Intent.createChooser(intent, "")); 
6

Bạn có thể làm cho nhấp được văn bản của bạn bằng cách sử dụng setOnClickListener vào văn bản

textView.setOnClickListener(new View.OnClickListener()); 

Bạn có thể mở ứng dụng email bằng cách tạo ra một ý định mới với ACTION_SEND. Settype, địa chỉ email và chủ đề như thế này:

Intent emailintent = new Intent(android.content.Intent.ACTION_SEND); 
emailintent.setType("plain/text"); 
emailintent.putExtra(android.content.Intent.EXTRA_EMAIL,new String[] {"[email protected]" }); 
emailintent.putExtra(android.content.Intent.EXTRA_SUBJECT, ""); 
emailintent.putExtra(android.content.Intent.EXTRA_TEXT,""); 
startActivity(Intent.createChooser(emailintent, "Send mail...")); 
+0

Điều đó không trả lời câu hỏi, vì toàn bộ 'TextView' sẽ có thể nhấp được. Chỉ địa chỉ email phải là một liên kết. –

0

Câu trả lời được chấp nhận có thể làm việc cho các email nhưng nếu bạn muốn để phát hiện các mẫu khác nhau như email, số liên lạc, weblink và thiết lập một riêng về triển khai nhấp chuột cho những mẫu tôi đề nghị bạn sử dụng CustomClickableEmailPhoneTextview

enter image description here

Sample Code để sử dụng thư viện.

CustomPartialyClickableTextview customPartialyClickableTextview= (CustomPartialyClickableTextview) findViewById(R.id.textViewCustom); 

       /** 
       * Create Objects For Click Patterns 
       */ 
       ClickPattern email=new ClickPattern(); 
       ClickPattern phone=new ClickPattern(); 
       ClickPattern weblink=new ClickPattern(); 

       /** 
       * set Functionality for what will happen on click of that pattern 
       * In this example pattern is email 
       */ 
       email.setOnClickListener(new ClickPattern.OnClickListener() { 
        @Override 
        public void onClick() { 

         Toast.makeText(MainActivity.this,"email clicked",Toast.LENGTH_LONG).show(); 


        } 
       }); 

       /** 
       * set Functionality for what will happen on click of that pattern 
       * In this example pattern is phone 
       */ 
       phone.setOnClickListener(new ClickPattern.OnClickListener() { 
        @Override 
        public void onClick() { 
         Toast.makeText(MainActivity.this,"phone clicked",Toast.LENGTH_LONG).show(); 

        } 
       }); 

       /** 
       * set Functionality for what will happen on click of that pattern 
       * In this example pattern is weblink 
       */ 
       weblink.setOnClickListener(new ClickPattern.OnClickListener() { 
        @Override 
        public void onClick() { 
         Toast.makeText(MainActivity.this,"website clicked",Toast.LENGTH_LONG).show(); 

        } 
       }); 

       /** 
       * set respective regex string to be used to identify patter 
       */ 
       email.setRegex("\\b[A-Z0-9._%+-][email protected][A-Z0-9.-]+\\.[A-Z]{2,4}\\b"); // regex for email 
       phone.setRegex("[1-9][0-9]{9,14}"); // regex for phone number 
       weblink.setRegex("^(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]"); // regex for weblink 

       /** 
       * add click pattern to the custom textview - first parameter is tag for reference second parameter is ClickPattern object 
       */ 
       customPartialyClickableTextview.addClickPattern("email",email); 
       customPartialyClickableTextview.addClickPattern("phone",phone); 
       customPartialyClickableTextview.addClickPattern("weblink",weblink); 
2

Xin lưu ý một lỗi nhỏ từ API 24 trở đi làm cho giải pháp được chấp nhận không hoạt động nếu địa phương của địa chỉ email có chính xác 2 ký tự như "[email protected]".

Xem vấn đề: https://issuetracker.google.com/issues/64435698

Bị cáo buộc cố định đã có, nhưng dường như không tung ra được nêu ra. (Bạn có thích điều đó mà họ biết về vấn đề này và thậm chí không bận tâm cập nhật tài liệu tương ứng? https://developer.android.com/reference/android/widget/TextView.html#attr_android:autoLink)

Vì vậy, trừ khi bạn chắc chắn rằng bạn không xử lý email 2 chữ cái đó địa chỉ, bạn thay vì phải sử dụng phương pháp được chấp nhận từ đây cho thời gian được:

TextView to send email when clicked

Hãy chăm sóc để loại bỏ các thuộc tính tự động liên kết từ TextView sau đó.

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