1

我对android很陌生,所以请原谅我的无知。

我的主要布局是垂直线性布局,我想在其中包含其他重复布局。但是,我希望更改包含布局的对象中的信息。例如,包含的通用布局将是一个水平线性布局,并且将具有一个 TextView 和一个 EditText。在我的主要布局中,我想包含其中两个通用布局。我将如何为每个包含动态更改 TextView 和 EditText 中的文本?另外,我将如何动态更改这些包含的布局的数量?

我的主要布局看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <include android:id="@+id/generic" />
    <include android:id="@+id/generic" />
    <include android:id="@+id/generic" />
    .
    .
    .
</LinearLayout>

我的通用布局是这样的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/generic"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal" >
    <TextView .../>
    <EditView .../>
</LinearLayout>

希望我足够清楚。谢谢

4

2 回答 2

1

我将如何为每个包含动态更改 TextView 和 EditText 中的文本?

你可以通过给每个唯一id的 s 来做到这一点。所以

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <include android:id="@+id/include1" />
    <include android:id="@+id/include2" />

然后在您需要访问他们的Views. 假设include1是一个LinearLayout

LinearLayout ll1 = (LinearLayout) findViewById(R.id.include1);  

然后从中得到TextView。假设TextView包含的有layout一个idtextView1

TextView tv1 = (TextView) ll1.findViewById(R.id.textView1); 

现在你可以做你想做的事了tv1

另外,我将如何动态更改这些包含的布局的数量?

您可以调用addView()要添加这些布局的任何父布局

于 2013-07-31T02:10:27.993 回答
0

如果您需要对布局进行动态处理,请在代码中执行:

{// add player name
            playerTxt = new RoboTextView(context);
            LayoutParams playerParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
                    ViewGroup.LayoutParams.WRAP_CONTENT);
            if (useSingleLine) {
                playerParams.addRule(CENTER_VERTICAL);
                playerParams.addRule(ALIGN_PARENT_LEFT);
            } else {
                playerParams.addRule(RIGHT_OF, AVATAR_ID);
                playerParams.addRule(ALIGN_TOP, AVATAR_ID);
            }

            playerTxt.setTextSize(playerTextSize);
            playerTxt.setTextColor(playerTextColor);
            playerTxt.setId(PLAYER_ID);
            playerTxt.setPadding((int) (4 * density), 0, 0, 0);
            playerTxt.setMarqueeRepeatLimit(2);
            playerTxt.setEllipsize(TextUtils.TruncateAt.MARQUEE);
            playerTxt.setFont(FontsHelper.BOLD_FONT);

            addView(playerTxt, playerParams);
        }

您可以创建自己的自定义MyLinearLayout extends LinearLayout并使用自己的 id 来绑定视图:

public static final int AVATAR_ID = 0x00004400;
public static final int PLAYER_ID = 0x00004401;
public static final int RATING_ID = 0x00004402;
public static final int FLAG_ID = 0x00004403;
public static final int PREMIUM_ID = 0x00004404;
public static final int CAPTURED_ID = 0x00004405;
public static final int TIME_LEFT_ID = 0x00004406;

如果您需要重复添加几个相似的视图(或与一个布局完全相同),您可以使用基本 ID:

public static final int BUTTON_PREFIX = 0x00002000;

并通过增加类似的计数器来添加其他小部件(视图)

int getButtonId(ButtonIds buttonId) {
    return BUTTON_PREFIX + buttonId.ordinal();
}

但请记住,您的 id 不得与同一布局中的其他 id 交叉。

于 2013-07-31T02:01:56.993 回答