[英]How do I make generic layouts to include in other layouts but change the properties inside the generic layouts dynamically in android app development?
我對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>
希望我足夠清楚。 謝謝
如何動態更改每個包含的TextView和EditText中的文本?
您可以通過指定每個唯一的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
。 假設包含layout
的TextView
的id
為textView1
TextView tv1 = (TextView) ll1.findViewById(R.id.textView1);
現在您可以用tv1
做您想做的事
另外,我將如何動態更改這些包含的布局的數量?
您可以在要添加這些布局的任何父布局上調用addView()
如果您需要對布局進行動態處理,請使用代碼進行處理:
{// 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交叉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.