طريقة سهلة بجنون لإنشاء روابط قابلة للنقر داخل TextView
.
أثناء إنشاء Talon لـ Twitter، كان أحد أصعب الأشياء التي واجهتها هو إنشاء هذه الروابط القابلة للنقر بناءً على نص محدد. لحسن الحظ، لقد جعلت من السهل على أي شخص تطبيق هذا النوع من الأنماط على TextView
الخاص به.
على غرار الطريقة التي يقوم بها جميع اللاعبين الكبار (Google+، Twitter، السعال Talon السعال )، تتيح لك هذه المكتبة إنشاء روابط قابلة للنقر لأي مجموعة من String
s داخل TextView
.
TextView
الخاص بكString
مفردة أو استخدم تعبيرًا عاديًا لتعيين روابط قابلة للنقر لأي نص يتوافق مع هذا النمط الميزة الرئيسية لاستخدام هذه المكتبة عبر وظيفة الارتباط التلقائي لـ TextView
هي أنه يمكنك ربط أي شيء، وليس فقط عنوان الويب ورسائل البريد الإلكتروني وأرقام الهواتف. كما يوفر أيضًا تخصيص الألوان وردود الفعل باللمس.
هناك طريقتان لاستخدام هذه المكتبة:
هذه هي الطريقة المفضلة. ببساطة أضف:
dependencies {
compile ' com.klinkerapps:link_builder:2.0.5 '
}
إلى تبعيات مشروعك وتشغيل gradle build
أو gradle assemble
.
قم بتنزيل الكود المصدري واستيراده كمشروع مكتبة في Eclipse. المشروع متاح في مكتبة المجلدات . لمزيد من المعلومات حول كيفية القيام بذلك، اقرأ هنا.
يمكن العثور على الوظيفة في MainActivity لمثال Kotlin. بالنسبة لـ Java، تحقق من JavaMainActivity.
للحصول على قائمة بالتعبيرات العادية التي أستخدمها في Talon، يمكنك الذهاب هنا
// Create the link rule to set what text should be linked.
// can use a specific string or a regex pattern
Link link = new Link ( "click here" )
. setTextColor ( Color . parseColor ( "#259B24" )) // optional, defaults to holo blue
. setTextColorOfHighlightedLink ( Color . parseColor ( "#0D3D0C" )) // optional, defaults to holo blue
. setHighlightAlpha ( .4f ) // optional, defaults to .15f
. setUnderlined ( false ) // optional, defaults to true
. setBold ( true ) // optional, defaults to false
. setOnLongClickListener ( new Link . OnLongClickListener () {
@ Override
public void onLongClick ( String clickedText ) {
// long clicked
}
})
. setOnClickListener ( new Link . OnClickListener () {
@ Override
public void onClick ( String clickedText ) {
// single clicked
}
});
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// create the link builder object add the link rule
LinkBuilder . on ( demoText )
. addLink ( link )
. build (); // create the clickable links
يمكنك أيضًا إنشاء CharSequence
بدلاً من إنشاء الروابط وتطبيقها مباشرةً على TextView
. لا تنس ضبط طريقة الحركة على TextView
الخاص بك بعد تطبيق CharSequence
، وإلا فلن تكون الروابط قابلة للنقر عليها.
// find the text view. Used to create the link builder
TextView demoText = ( TextView ) findViewById ( R . id . test_text );
// Add the links and make the links clickable
CharSequence sequence = LinkBuilder . from ( this , demoText . getText (). toString ())
. addLinks ( getExampleLinks ())
. build ();
demoText . setText ( sequence );
// if you forget to set the movement method, then your text will not be clickable!
demoText . setMovementMethod ( TouchableMovementMethod . getInstance ());
إذا كنت ترغب في تعيين لون النص الافتراضي للروابط دون إدخاله يدويًا على كل كائن Link
، فيمكن تعيينه من سمة النشاط.
< style name = " LinkBuilderExampleTheme " parent = " android:Theme.Holo.Light " >
< item name = " linkBuilderStyle " >@style/LinkBuilder</ item >
</ style >
< style name = " LinkBuilder " >
< item name = " defaultLinkColor " >#222222</ item >
< item name = " defaultTextColorOfHighlightedLink " >#444444</ item >
</ style >
المكتبة مبنية على لغة Kotlin، لذا تحصل على بعض طرق الامتداد التي يمكنك استخدامها لتطبيق الروابط على TextView
، بدلاً من إنشاء المنشئ.
val demo = findViewById< TextView >( R .id.demo_text)
demo.applyLinks(link1, link2, .. .)
demo.applyLinks(listOfLinks)
افتراضيًا، سوف يستهلك LinkBuilder
جميع أحداث اللمس الموجودة على TextView
الخاص بك. وهذا يعني أنه لن يتم استدعاء ListView.OnItemClickListener
أبدًا إذا حاولت تنفيذه. إصلاح ذلك هو تنفيذ LinkConsumableTextView
بدلاً من TextView العادي في تخطيطاتك.
سوف يستهلك LinkConsumableTextView
الخاص بي أحداث اللمس فقط إذا قمت بالنقر فوق الارتباط الموجود داخل TextView
. وإلا، فسيتم تأجيل حدث اللمس إلى الأصل، مما يسمح لك باستخدام أسلوب ListView.OnItemClickListener
.
يرجى تفرع هذا المستودع والمساهمة مرة أخرى باستخدام طلبات السحب. يمكن طلب الميزات باستخدام المشكلات. جميع التعليمات البرمجية والتعليقات والانتقادات موضع تقدير كبير.
يمكن العثور على سجل التغيير الكامل للمكتبة هنا.
Copyright 2015 Luke Klinker
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.