如何在RelativeLayout中引用TextView

时间:2013-08-12 19:49:58

标签: android android-layout

这里仍然是一个总菜刀......

我正在尝试渲染足球比赛的规格(球队,时间,锦标赛等)。

我创建了一个team.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/teamImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginRight="2dp"
    android:adjustViewBounds="true"
    android:src="@drawable/sofabold_launcher"
    android:layout_alignWithParentIfMissing="false"
    android:clickable="false"
    android:cropToPadding="true"
    android:contentDescription="@string/teamLogoContentDescription"/>

<TextView
    android:id="@id/teamName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/teamName"
    android:textSize="14sp"
    android:textStyle="bold"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/teamImageView"/>

</RelativeLayout>

一个teams.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:orientation="vertical" >

<include
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/team"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:id="@+id/homeTeam"/>

<include
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        layout="@layout/team"
        android:layout_below="@id/homeTeam"
        android:id="@+id/awayTeam"/>
</RelativeLayout>

然后我有一个matchLayout.xml,包括我的teams.xml

我最初的尝试是创建一个具有不同元素的大布局,并通过我们的matchHolder中的id引用它们并使用类似

的内容填充它们
matchHolder.homeTeamName.setText(match.getHomeTeamName());

现在我尝试将populateMatchHolder更改为:

private void populateMatchHolder(View convertView, BaseMatchHolder matchHolder) {
    matchHolder.teams = (RelativeLayout) convertView.findViewById(R.id.teams);
}

现在我无法弄清楚如何在RelativeLayout(团队)内的另一个RelativeLayout(匹配)中引用TextView(主队名称)。

我完全忽略了这一点吗?我是否需要在某处拥有一个名为homeTeamName的ID?和客队名?是不是只有两次拥有teamName?一旦进入homeTeam,包括team.xml,一旦在teamTeam中包含team.xml。

希望我的意思有点清楚:-)已经很晚了我累了: - /

提前致谢

2 个答案:

答案 0 :(得分:1)

如果你想通过id引用id,在给定的范围内id应该是唯一的,否则android将只返回给定id的第一个视图。

因此,如果您执行此类teamsView.findViewById(R.id.teamName)之类的操作,则只能获得homeTeam布局的teamName视图,因为teams.xml上有两个具有相同ID的视图(包含在homeTeam中,另一个包含在awayTeam中)。

解决方案:首先获得每个团队的团队布局,然后设置团队名称 例如:

View homeTeam = teamsView.findViewById(R.id.homeTeam);
TextView homeTeamName = homeTeam.findViewById(R.id.teamName);
homeTeamName.setText("blablabal");
//the same for other team

顺便说一句。使用android:id="@+id/teamName"代替android:id="@id/teamName"

答案 1 :(得分:1)

您可以使用该textView的ID来引用它。例如

<TextView
    android:id="@+id/teamName"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/teamName"
    android:textSize="14sp"
    android:textStyle="bold"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/teamImageView"/>

您可以通过id teamName引用它。当您在另一个布局中使用include标记时,它将成为该父布局的一部分。

还有一件事要用 use android:id="@+id/teamName"而不是android:id="@id/teamName"因为无论何时在布局中第一次使用该特定id,它都必须与@ + id一起使用,之后您只需在布局中的任何位置使用@id来引用该特定视图