我对android很新,所以请原谅我的无知。
我的主要布局是垂直LinearLayout,我想在其中包含其他重复布局。但是,我希望更改包含布局的对象中的信息。例如,包含的通用布局将是一个水平的LinearLayout,并将具有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>
希望我足够清楚。感谢
答案 0 :(得分:1)
如何动态更改TextView和EditText中每个include的文本?
您可以通过提供每个唯一id
来完成此操作。所以
<?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
id
textView1
TextView tv1 = (TextView) ll1.findViewById(R.id.textView1);
现在,您可以使用tv1
另外,我如何动态更改这些包含布局的数量?
您可以在要将这些布局添加到
的任何父布局上调用addView()
答案 1 :(得分: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交叉。