我在TextView
中有一些以'#'开头的哈希标签
示例:“#one#two Hello World #three”。
我希望这些哈希标记可以单独点击并打开一个活动并在该活动中获取此文本。
因此,这些哈希作为链接工作并打开一个活动。标签也不固定意味着可以是任何文本。同时将哈希标记的颜色更改为红色,其余标记的颜色将为黑色
答案 0 :(得分:7)
根据您的要求修改以下内容。使用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
}
}
}
捕捉模拟器
在每个哈希点击上显示吐司一,二和三。而不是吐司开始一项新的活动。
编辑:
如果您想要点击字符串
ss1.setSpan(new MyClickableSpan(""+i,split[i]), 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
然后
String clicked;
String astring;
public MyClickableSpan(String check,String actualstring) {
super();
clicked =check;
astring =actualstring; // pass this to next activity using intent
}
然后
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();
}
}
答案 1 :(得分:0)
您可以使用LinearLayout
:
在xml中添加:
<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" />
初始布局:
// 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);
向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();
}
});
}