我有两个textview不同的字体和样式,我需要将它们放在一行中,但用户似乎只有一个textview。
更多细节,如果屏幕上的第二个文字很大,我需要在第一个文本下的第二行完成
ex-1: text1 text2
ex-2: teeeeeext1 teeeeee
eeeext2
我不知道是否可以这样做,所以我请求帮助
的 [编辑]
将它们放在两个textview中是很重要的,因为我会为它们设置两个不同的点击监听器
感谢。
答案 0 :(得分:1)
如果你想要你可以使用fromHtml
标签,以便只在一个文本视图中使用字体和样式..这也将满足下一行中文本的需要
答案 1 :(得分:1)
您可以使用我在this和android的StyleSpan
类的帮助下编写的自定义span类。
import android.graphics.Paint;
import android.graphics.Typeface;
import android.support.annotation.Nullable;
import android.text.TextPaint;
import android.text.style.ClickableSpan;
import android.view.View;
/**
* Created by aminmsvi on 9/7/2017
*/
public class CustomClickableSpan extends ClickableSpan {
private final int mStyle;
private final ClickableSpanListener mListener;
/**
* @param style An integer constant describing the style for this span. Examples
* include bold, italic, and normal. Values are constants defined
* in {@link android.graphics.Typeface}.
*/
public CustomClickableSpan(@Nullable ClickableSpanListener listener, int style) {
mStyle = style;
mListener = listener;
}
/**
* Copied this method from {@link android.text.style.StyleSpan} source code
*/
private static void apply(Paint paint, int style) {
int oldStyle;
Typeface old = paint.getTypeface();
if (old == null) {
oldStyle = 0;
} else {
oldStyle = old.getStyle();
}
int want = oldStyle | style;
Typeface tf;
if (old == null) {
tf = Typeface.defaultFromStyle(want);
} else {
tf = Typeface.create(old, want);
}
int fake = want & ~tf.getStyle();
if ((fake & Typeface.BOLD) != 0) {
paint.setFakeBoldText(true);
}
if ((fake & Typeface.ITALIC) != 0) {
paint.setTextSkewX(-0.25f);
}
paint.setTypeface(tf);
}
@Override
public void onClick(View widget) {
if (mListener != null) {
mListener.onClick();
}
}
@Override
public void updateDrawState(TextPaint ds) {
apply(ds, mStyle);
}
public interface ClickableSpanListener {
void onClick();
}
}
你可以像这样使用它:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
...
TextView textView = findViewById(R.id.text);
SpannableString spannableString = new SpannableString("This is a text");
spannableString.setSpan(new CustomClickableSpan(() -> Toast.makeText(this, "This is a text".substring(0, 4), Toast.LENGTH_SHORT).show(), Typeface.BOLD), 0, 4, 0);
spannableString.setSpan(new CustomClickableSpan(() -> Toast.makeText(this, "This is a text".substring(5, 10), Toast.LENGTH_SHORT).show(), Typeface.ITALIC), 5, 10, 0);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());
// if you want to remove highlight color, uncomment this line
// textView.setHighlightColor(Color.TRANSPARENT);
...
}
}
希望这有帮助。
答案 2 :(得分:0)
您可以使用SpannableStringBuilder类来实现,我想这是您要搜索的答案SpannableStringBuilder
答案 3 :(得分:0)
如果您希望在不向用户提供单一内容的情况下显示两个textview的一面,请尝试以下操作:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horzontal" >
<TextView
android:id="@+id/textView3"
android:layout_width="0dp"
android:padding="5dp"
android:gravity="center|start"
android:layout_height="match_parent"
android:layout_weight="1"
android:text="TextView" />
<TextView
android:id="@+id/textView2"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:padding="5dp"
android:text="TextView asdasdasd as das dasdasdas adasd asdas d" />
希望它有所帮助。