在TextView之前或之后添加静态文本

时间:2017-08-09 02:03:16

标签: android textview

我是Android Dev的新手,我尝试在TextView中动态部分之前和之后轻轻地添加静态文本,而不必在每次更新动态部分时添加2个其他TextView或添加这些内容我的TextView。

与CSS中的内容属性:: after或::之前的内容类似。

可能看起来像这样的东西:

<TextView
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="10"
  android:textAfter=" km/h" />

我上下挖谷歌(有时候去了第3页)但我找不到任何方法来做这个对我来说非常基本的技巧。

3 个答案:

答案 0 :(得分:3)

您可以使用%d%1$d将字符串资源用于具有预定义格式的动态文本。

例如,如果要显示10 km/h之类的内容,可以使用这样的字符串资源:

<string name="range_in_kilometer_per_hour">%d km/h</string>

然后您可以通过以下代码进行设置:

TextView tvKm;
...
int currentKm = 10;
String kmValue = getString(R.string.range_in_kilometer_per_hour, currentKm);

tvKm.setText(kmValue);

或者,如果您想显示10 km each 1 hour之类的内容,可以使用以下内容:

<string name="range_in_kilometer_per_hour">%1$d km each %2$d hour</string>

然后使用以下命令将其设置为TextView:

int currentKm = 10;
int hour = 1;
String kmValue = getString(R.string.range_in_kilometer_per_hour, currentKm, hour);

tvKm.setText(kmValue);

如果要使用字符串而不是整数,可以使用%s进行单个文本替换,或使用%1$s进行多个文本替换。

您需要记住%1$s 1 的方式是文本替换的位置。

阅读更多内容:

  1. String Resources
  2. getString

答案 1 :(得分:1)

在我看来,你只需要一个自定义TextView。然后你可以制作一个。

首先,声明CustomTextView的自定义属性。在attrs.xml中创建名为/res/values的新文件。用下面的代码填写。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="CustomTextView">
        <attr name="textAfter" format="string"/>
    </declare-styleable>
</resources>

第二次,将您的CustomTextView创建为java文件。这很简单。您只需要获取textAfter的属性值,并在调用setText时将其设置为文本的尾部。

public class CustomTextView extends TextView {
    private String mTextAfter;

    public CustomTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.CustomTextView);
        mTextAfter = array.getString(R.styleable.CustomTextView_textAfter);
        array.recycle();
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void setText(CharSequence text, BufferType type) {
        super.setText(text + (TextUtils.isEmpty(mTextAfter) ? "" : mTextAfter), type);
    }
}

Thrid ,在布局中使用CustomTextView。(不要忘记在布局的根视图中添加xmlns:app="http://schemas.android.com/apk/res-auto"

<!-- your package name -->
<com.xxx.xxx.CustomTextView
    android:id="@+id/mtv"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:textAfter=" km/h" />

第四,请在XXXActivity.java中使用。

    //TextView mtv = (TextView) findViewById(R.id.mtv));// this is worked too
    CustomTextView mtv = ((CustomTextView) findViewById(R.id.mtv));
    mtv.setText("18");//do NOT put int value of 18 in it, or it will be treated as a resource id

然后您会看到,km/h之后添加了18

CustomTextView

答案 2 :(得分:0)

我认为你应该这样做 删除xml中的文本,即km / hr 转到你的活动java文件让它成为activity_main.java 动态获取速度值 为...说 int speed; 然后在textview(xml)中 分配任何ID android:id="@+id/speedTextView"

在java中 分配速度值 TextView speedWithUnit = (TextView) findViewById(R.id.speedTextView);speedWithUnit.setText(speed+"km/hr");

希望这个帮助