Android API 3:マージされたレイアウトからコンポーネントへのアクセス
-
26-10-2019 - |
質問
チェスボードをコーディングしています。レイアウトには、いくつかの「マージされた」レイアウトを含めます。プロパティの一部を変更するために、アクティビティコードから「マージされた」コンポーネントにアクセスしたいだけです(ImageView Background_color、ImageView Image Path ...)。
編集:たとえば、行ID(r.id.row_1)を渡し、この行IDのすべてのコンポーネントを初期化し、forループ:8セルにはそれぞれ異なる背景色が与えられます。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
initializeComponents(R.id.row_2);
}
public initializeComponents(int id){
/* inflates the given layout child components
* and set their properties
*/
}
これが私のmain.xmlです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<include layout="@layout/board"/>
</LinearLayout>
これが私のbeard.xmlです
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<include android:id="@+id/row_8" layout="@layout/board_line"/>
<include android:id="@+id/row_7" layout="@layout/board_line"/>
<include android:id="@+id/row_6" layout="@layout/board_line"/>
<include android:id="@+id/row_5" layout="@layout/board_line"/>
<include android:id="@+id/row_4" layout="@layout/board_line"/>
<include android:id="@+id/row_3" layout="@layout/board_line"/>
<include android:id="@+id/row_2" layout="@layout/board_line"/>
<include android:id="@+id/row_1" layout="@layout/board_line"/>
</TableLayout>
ここで私のboard_line.xml:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<TableRow
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<ImageView
android:id="@+id/a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/c"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/d"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/e"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/f"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/g"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
<ImageView
android:id="@+id/h"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="@dimen/cell_dimension"
android:minHeight="@dimen/cell_dimension"
android:maxWidth="@dimen/cell_dimension"
android:maxHeight="@dimen/cell_dimension"
/>
</TableRow>
助けてくれてありがとう。
解決
LayoutInflaterを使用して(または、完全にプログラムでビューを作成する)、それらすべてをニーズに合わせて組み合わせることができます。次の例では、ランダムな色の5x5ボードを作成する必要があります。レイアウトパラムをコードに設定するのは醜いので、XMLでそれらを設定し、レイアウトを膨らませます。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout ll = (LinearLayout) inflater.inflate(R.layout.main, null);
TableLayout tl = (TableLayout) ll.findViewById(R.id.tableLayout);
for (int j = 0; j < 5; j++) {
TableRow tr = (TableRow) inflater.inflate(R.layout.table_row, null);
for (int i = 0; i < 5; i++) {
ImageView iv = (ImageView) inflater.inflate(R.layout.image_view, null);
iv.setBackgroundColor(new Random().nextInt());
tr.addView(iv);
}
tl.addView(tr);
}
setContentView(ll);
}
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TableLayout
android:id="@+id/tableLayout"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</TableLayout>
</LinearLayout>
table_row.xml
<TableRow xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableRow>
image_view.xml
just one of those you defined in board_line.xml:
所属していません StackOverflow