我想将TextView
上的某些文字与Activity
相关联。这是我的TextView:
<TextView
android:id="@+id/termsLink"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/terms"
android:layout_weight="4"/>
其中@string/terms
是:
<string name="terms">Accept <a href="#">terms & conditions.</a>.</string>
如果我有一个指向网页的链接,我会这样做:
TextView link = (TextView) findViewById(R.id.termsLink);
link.setMovementMethod(LinkMovementMethod.getInstance());
但是当我按下链接时,我不知道如何启动活动,因为它是真正的链接(链接网页)。
编辑:请注意,我不必在全文中处理onClick
事件,因为该链接仅位于"terms & conditions"
部分。
编辑2:我尝试使用评论中建议的两个TextView
和下面的一个答案来达到同样的效果。但有时候(取决于屏幕)"terms & conditions"
部分占用两行,因为它没有在可用空间上正确填充,所以第二行显示在第二行TextView
而不是在第二行Accept terms &
conditions.
上第二行。
效果类似于:
Accept terms &
conditions.
我希望它会是这样的:
//Right here is where I would add the array containing the elements.
提前致谢!
答案 0 :(得分:1)
使用内部onClick侦听器
创建一个帮助器类public class ClickSpan extends ClickableSpan {
private String url;
private OnClickListener listener;
public ClickSpan(String url, OnClickListener listener) {
this.url = url;
this.listener = listener;
}
@Override
public void onClick(View widget) {
if (listener != null) listener.onClick(url);
}
public interface OnClickListener {
void onClick(String url);
}
}
然后将现有范围转换为可点击的范围
public static Spannable createClickableSpans(Spanned original, ClickSpan.OnClickListener listener) {
SpannableString result = new SpannableString(original);
URLSpan[] spans = result.getSpans(0, result.length(), URLSpan.class);
for (URLSpan span : spans) {
int start = result.getSpanStart(span);
int end = result.getSpanEnd(span);
int flags = result.getSpanFlags(span);
result.removeSpan(span);
result.setSpan(new ClickSpan(span.getURL(), listener), start, end, flags);
}
return result;
}
因此,最终用法就像
TextView link = (TextView) findViewById(R.id.termsLink);
link.setMovementMethod(LinkMovementMethod.getInstance());
link.setText(createClickableSpans((Spanned)link.getText(), new ClickSpan.OnClickListener(){
@Override
public void onClick(String url){
//Handle click
}
});
答案 1 :(得分:0)
你应该把文本分成2个文本视图,一个是条款和条件,另一个只是接受。它会使事情变得更清晰,更容易。以下TextView假设它只是接受。
在布局中对应的java类(例如:activity_main - &gt; MainActivity):
public void start_activity(View view){
Intent newActivityIntent = new Intent(this,NewActivity.class);
startActivity(newActivityIntent);
}
NewActivity.class只是您要开始的活动的名称。
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
....
}
public void start_activity(View view){
.....
}
}
答案 2 :(得分:0)
要使仅部分TextView可点击,您可以在TextView中使用 spannable 并设置 onClick 事件侦听器。从这里开始,您可以照常启动活动。您可以通过指定字符位置(从头到尾)
来限制文本的可单击部分通过@ becomputer06
查看此答案