android中的setText()显示垃圾值

时间:2017-06-15 18:41:41

标签: android android-layout textview

我有一个Option我有两个activity,我已经对这两个textViews应用了setText()方法。代码如下所示:

textViews

activity_main.xml中

    public class MainActivity extends AppCompatActivity {

    TextView text1,text2;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text1=(TextView)findViewById(R.id.text1);
        text2=(TextView)findViewById(R.id.text2);

        text1.setText(R.string.display+" text");
        text2.setText("Display"+" text");
    }

}

的strings.xml

    <?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.shaloin.settext.MainActivity">


    <TextView
        android:id="@+id/text1"
        android:layout_marginTop="30dp"

        android:layout_width="match_parent"
        android:textSize="20sp"
        android:layout_height="wrap_content"
        android:textColor="#000000"/>
    <TextView
        android:id="@+id/text2"
        android:layout_marginTop="30dp"
        android:layout_below="@+id/text1"
        android:layout_width="match_parent"
        android:textSize="20sp"
        android:layout_height="wrap_content"
        android:textColor="#000000"/>

</RelativeLayout>

问题在于,第一个 <string name="display">Display : </string> 显示textView,第二个2131099682 text显示textView。我无法理解为什么会这样。

此外,如果我将Display text更改为 text1.setText(R.string.display+" text");,我得到正常输出text1.setText(R.string.display);。任何人都可以清楚我的怀疑。我附上了一个显示输出的图像。谢谢:))

Screen

3 个答案:

答案 0 :(得分:1)

R.string.display实际上是一个数字ID,这就是你所看到的。你需要使用的是getString(R.string.display)

通过单独使用ID,setText知道您传入了一个整数并解析了字符串本身。但是如果你在后面添加一个字符串,那么setText会认为它是一个字符串,并在它得到它时输出它。

答案 1 :(得分:0)

你应该获得应用程序的上下文。

textViewID.setText(context.getResources()。getString(R.string.display +“如果你想要别的东西”);

我喜欢创建一个接受int的方法然后通过执行textViewID.setText(方法(R.id.display)+“如果你想要的其他东西”)使它看起来更好;)

textViewID.setText(R.string.display)不起作用的原因是因为它实际上是一个int值(R.string.display)。另外,您需要获得该资源的价值。

答案 2 :(得分:0)

您无法将资源中的String值直接转换为Activity。您需要获取具有资源对象的那些。目前您正在获得如下价值:

text1.setText(R.string.display+" text");

将其更改为:

text1.setText(getResources().getString(R.string.display) + " text");

快乐的编码!