安卓 - 设置TextView文本

80

我目前正在学习一些android知识,为了学校的一个项目。我无法找到动态设置TextView文本的方法。

这是我的代码:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_enviar_mensaje);
    err = (TextView)findViewById(R.id.texto);
    err.setText("Escriba su mensaje y luego seleccione el canal.");
}

目前这个功能无法正常工作,我找不到解决方法...

非常感谢任何帮助... 感谢你的时间, José。

编辑:这里是activity_enviar_mensaje.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ...
    tools:context=".EnviarMensaje" >
    ...
    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/listaVista"
        android:layout_alignParentBottom="true"
        android:layout_alignRight="@+id/listaVista"
        android:text="TextView" />
    ...
</RelativeLayout>

不工作的意思是显示的文本在任何时候都不会改变...


2
“is not working”是什么意思?如果您的回答是“没有显示”,那么请发布XML布局。 - gunar
1
你所展示的代码看起来很不错。你是否遇到了任何错误或崩溃? - codeMagic
1
err 声明为一个 TextView 吗? TextView err; - Nick
是的,err已经很好地声明了。 - jpaguerre
1
我认为你的TextView被ListView遮挡了。 - Ishan Fernando
显示剩余4条评论
23个回答

144

在您的布局XML中:

<TextView
        android:id="@+id/myAwesomeTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="Escriba el mensaje y luego clickee el canal a ser enviado"
        android:textSize="20sp" />

然后,在您的活动类中:

// globally 
TextView myAwesomeTextView = (TextView)findViewById(R.id.myAwesomeTextView);

//in your OnCreate() method
myAwesomeTextView.setText("My Awesome Text");

4
如果我将 myAwesomeTextView 设置为全局变量,就会出现崩溃,因为 findViewById 必须在 onCreate 中调用? - Timothy Leung
6
@TimothyLeung:将变量声明为全局变量,并仅在onCreate()中调用findById。 - Hussain Akhtar Wahid 'Ghouri'
如果你想在onCreate()方法之外访问它,你只需要将它声明为类的一个字段。 - ChrisMcJava
有没有可能在没有ID的情况下设置文本?[我的问题链接](https://stackoverflow.com/q/64714568/5995648) - Arbaz.in

24

将此代码放入您的XML文件中

<TextView
    android:id="@+id/textview1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

将此代码放入您的Java文件中

// 在全局声明组件(如TextView)是一个好习惯

TextView mTextView = (TextView) findViewById(R.id.textview1);

// 把这段代码放在OnCreate方法中

mTextView.setText("Welcome to Dynamic TextView");

10

好的,@+id/listaVista ListView会在@+id/texto之后绘制并盖住它。所以从ListView中进行更改:

android:layout_below="@+id/editText1"
致:
android:layout_above="@+id/texto"

另外,由于列表是在TextView之后绘制的,我发现在TextView中使用android:layout_alignRight="@+id/listaVista"很危险。因此,请删除它并找到其他对齐方式。

编辑重新审视您的布局,我认为这才是您真正想要的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".EnviarMensaje" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:text="Escriba el mensaje y luego clickee el canal a ser enviado"
        android:textSize="20sp" />

    <EditText
        android:id="@+id/editText1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_alignRight="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:ems="10"
        android:inputType="text" />

    <TextView
        android:id="@+id/texto"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/listaVista"
        android:layout_alignParentBottom="true"
        android:text="TextView" />

    <ListView
        android:id="@+id/listaVista"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/texto"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/editText1" >
    </ListView>

</RelativeLayout>

非常感谢提供的xml文件...但不幸的是它没有解决原来的问题...文本视图仍然显示"TextView"而不是“Escriba su mensaje y luego seleccione el canal.”...有任何想法吗? - jpaguerre
@user2471107 请尝试从您的布局文件中删除TextView中的文本,然后再检查。如果仍然无法正常工作,请发布您输出的屏幕截图。 - GrIsHu

8
在 XML 中使用这个:
<TextView 
       android:id="@+id/textView"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"/>

在 Activity 中定义视图:
Textview textView=(TextView)findViewById(R.id.textView);
textView.setText(getResources().getString(R.string.txt_hello));

在字符串文件中:

<string name="txt_hello">Hello</string>

输出:你好


6
在布局文件中。
<TextView
   android:id="@+id/myTextView"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:text="Some Text"
   android:textSize="18sp"
   android:textColor="#000000"/>

在活动中
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setText("Hello World!");

4

试一下这个:

TextView err = (TextView)findViewById(R.id.text);

请确保导入 TextView。


4

在你的activity_main.xml中粘贴以下代码:

            <TextView
                 android:id="@+id/name"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
                 android:layout_alignParentLeft="true"
                 android:layout_alignParentTop="true"
                 android:layout_marginLeft="19dp"
                 android:layout_marginTop="43dp"
                 android:text="@string/name" />

并转到res文件夹->值->strings.xml将下面的代码粘贴到已有的代码中:

          <string name="name">Escriba su mensaje y luego seleccione el canal.</string>

以上代码意味着您已创建了一个TextView,其id为name(android:id="@+id/name"),并将该TextView分配给一个带有标识符name(android:text="@string/name")的字符串。在strings.xml中,使用该标识符name来分配文本。

4

我曾经也遇到过类似的问题。后来发现我的两个TextView对象有相同的ID。它们在不同的视图文件中,因此Eclipse没有报错。尝试重命名你TextView中的id,看看是否可以解决你的问题。


4
为什么不尝试在onStart()方法中分配TextView的内容,而不是在onCreate()方法中?

3
您可以按照以下方式在程序中动态设置TextView的文本内容。
TextView textView = (TextView)findViewById(R.id.texto);
err.setText("Escriba su mensaje y luego seleccione el canal.");

或者
TextView textView = (TextView)findViewById(R.id.texto);
err.setText(getActivity().getResource().getString(R.string.seleccione_canal));

您可以在xml中像下面这样设置字符串。
<TextView
         android:id="@+id/name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
         android:layout_marginLeft="19dp"
         android:layout_marginTop="43dp"
         android:text="Escriba su mensaje y luego seleccione el canal." />

或者

<TextView
         android:id="@+id/name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
         android:layout_marginLeft="19dp"
         android:layout_marginTop="43dp"
         android:text="@string/seleccione_canal" />

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接