I have some hash tags in a TextView
which are starts with \'#\'
Example:\"#one#two Hello World #three\".
I wants these hash tags clickable separ
You can use LinearLayout
:
In xml add :
<EditText
android:id="@+id/tag_ET"
android:layout_width="0dp"
android:layout_height="fill_parent"
android:layout_weight="4"
android:gravity="left"
android:inputType="text" />
<Button
android:id="@+id/add_Btn"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="right"
android:layout_weight="1"
android:text="@string/tags_add_btn_text" />
<LinearLayout
android:id="@+id/tags_view"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:orientation="horizontal" />
Init layout :
// EditText to write Tags.
EditText tag = (EditText) findViewById(R.id.tag_ET));
// Button used to add tags
Button addTagBtn = (Button) findViewById(R.id.add_Btn));
// layout contains added tags.
final LinearLayout tagsView = (LinearLayout) findViewById(R.id.tags_view);
Add tags to tagView :
final String tagTxt = tagEt.getText().toString();
if (!tagTxt.isEmpty()) {
Spannable buttonLabel = new SpannableString(tagTxt);
// clear tag edit text
tagEt.setText("");
// add tag to layout
Button btn = new Button(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
lout.addView(btn, tagsView);
btn.setText(buttonLabel);
btn.setBackgroundResource(R.drawable.hover);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// Toast whatever you want.
Toast.makeText(getApplicationContext(), tagTxt,1000).show();
}
});
}
Modify the below according to your requirement. Use a SpannableString
String s ="#one #Two Hello World #three";
String split[] = s.split("#");
TextView_tv = (TextView) findViewById( R.id.tv );
for(int i=1;i<split.length;i++)
{
SpannableString ss1= new SpannableString("#"+split[i]);
ss1.setSpan(new MyClickableSpan(""+i), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ss1.setSpan(newForegroundColorSpan(Color.RED),0,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
_tv.append(ss1);
_tv.append(" ");
}
_tv.setMovementMethod(LinkMovementMethod.getInstance());
class MyClickableSpan extends ClickableSpan{
String clicked;
public MyClickableSpan(String string) {
super();
clicked =string;
}
public void onClick(View tv) {
if(clicked.equals("1"))
{
Toast.makeText(getApplicationContext(), "One",1000).show();
}
else if(clicked.equals("2"))
{
Toast.makeText(getApplicationContext(), "Two",1000).show();
}
else
{
Toast.makeText(getApplicationContext(), "Three",1000).show();
}
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setUnderlineText(false); // set to false to remove underline
}
}
}
Snap on Emulator
On each hash click displays toast one, two and three. Instead of toast start a new activity.
Edit:
If you want the string clicked
ss1.setSpan(new MyClickableSpan(""+i,split[i]), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Then
String clicked;
String astring;
public MyClickableSpan(String check,String actualstring) {
super();
clicked =check;
astring =actualstring; // pass this to next activity using intent
}
Then
public void onClick(View tv) {
if(clicked.equals("1"))
{
Toast.makeText(getApplicationContext(), astring,1000).show();
}
else if(clicked.equals("2"))
{
Toast.makeText(getApplicationContext(), astring,1000).show();
}
else
{
Toast.makeText(getApplicationContext(), astring,1000).show();
}
}