layout_widthやlayout_heightなどのlayout_から始まる属性は親Viewに対する設定値です。
ですので、親View配下のLayoutParamsクラスを生成し、生成したインスタンスに対して値を設定・子ViewのLayoutParametersプロパティに格納という形でlayout_widthなどは動的に設定できます。
(たとえば親がFrameLayoutの場合はFrameLayout.LayoutParamsクラス)
(axml(xml)から生成したレイアウトを動的に扱う場合はすでに格納されているのでキャストして利用)
textやgravity、paddingなどの属性は自身に対する設定値なのでOrientationのように設定することが可能です(この際、Java向けAPIからプロパティではなくメソッドに置き換えられている場合もあるのでオブジェクト初期化子内で記述できないこともあります)
以下のサンプルコードのようにレイアウトをコードから動的に生成するのは位置・サイズ調整など大変な要素が大きいのでLayoutInflaterなどを利用して極力axml(xml)からレイアウトを作成することをお勧めします。
また、Xamarin.AndroidにつきましてはAndroid(Java) APIをそのまま置き換えている面が大きいので、Android自体の開発に関する疑問は、Javaなどで記述されている記事などが検索で引っかかることが多いと思うのでそちらを参考にすればいいでしょう。(もちろんXamarin.Android固有の疑問点なども出ますので適宜調べ方の調整は必要です)
MainActivity.cs
csharp
1using Android.App;
2using Android.Content;
3using Android.OS;
4using Android.Views;
5using Android.Widget;
6
7namespace TeratailLayoutExample {
8
9 [Activity(Label = "TeratailLayoutExample", MainLauncher = true, Icon = "@drawable/icon")]
10 public class MainActivity : Activity {
11
12 protected override void OnCreate(Bundle bundle) {
13 base.OnCreate(bundle);
14
15 //SetContentView(Resource.Layout.Main);
16 SetContentView(makeViews());
17 }
18
19 private View makeViews() {
20 var root = new LinearLayout(this) {
21 Orientation = Orientation.Vertical,
22 LayoutParameters = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.MatchParent)
23 };
24
25 var title = new TextView(this) {
26 Text = "Title",
27 Gravity = GravityFlags.Center,
28 LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent)
29 };
30 root.AddView(title);
31
32 var horizontalLayout = new LinearLayout(this) {
33 Orientation = Orientation.Horizontal,
34 LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent) {
35 TopMargin = this.ConvertDensityIndependentPixelToPixel(16f)
36 }
37 };
38 root.AddView(horizontalLayout);
39
40 var leftText = new TextView(this) {
41 Text = "LeftText",
42 Gravity = GravityFlags.Center,
43 LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent) {
44 Weight = 1f
45 }
46 };
47 horizontalLayout.AddView(leftText);
48
49 var rightText = new TextView(this) {
50 Text = "RightText",
51 Gravity = GravityFlags.Center,
52 LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent) {
53 Weight = 1f
54 }
55 };
56 horizontalLayout.AddView(rightText);
57
58 var content = new TextView(this) {
59 Text = "Dynamic Layout",
60 Gravity = GravityFlags.Center,
61 LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent)
62 };
63 content.SetPadding(0, this.ConvertDensityIndependentPixelToPixel(16f), 0, 0);
64 root.AddView(content);
65
66 return root;
67 }
68 }
69
70 public static class ContextExtension {
71
72 public static int ConvertDensityIndependentPixelToPixel(this Context context, float dp) {
73 var metrics = context.Resources.DisplayMetrics;
74 return (int)(dp * ((int)metrics.DensityDpi / 160f));
75 }
76 }
77}
78
Main.axml
axml
1<?xml version="1.0" encoding="utf-8"?>
2<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="match_parent"
5 android:layout_height="match_parent">
6 <TextView
7 android:text="Title"
8 android:layout_width="match_parent"
9 android:layout_height="wrap_content"
10 android:id="@+id/Title"
11 android:gravity="center" />
12 <LinearLayout
13 android:orientation="horizontal"
14 android:layout_marginTop="16dp"
15 android:layout_width="match_parent"
16 android:layout_height="wrap_content"
17 android:id="@+id/HorizontalLayout">
18 <TextView
19 android:text="LeftText"
20 android:layout_width="wrap_content"
21 android:layout_height="wrap_content"
22 android:layout_weight="1"
23 android:gravity="center"
24 android:id="@+id/LeftText" />
25 <TextView
26 android:text="RightText"
27 android:layout_width="wrap_content"
28 android:layout_height="wrap_content"
29 android:layout_weight="1"
30 android:gravity="center"
31 android:id="@+id/RightText" />
32 </LinearLayout>
33 <TextView
34 android:text="Static Layout"
35 android:layout_width="match_parent"
36 android:layout_height="wrap_content"
37 android:paddingTop="16dp"
38 android:id="@+id/Content"
39 android:gravity="center" />
40</LinearLayout>
コードから生成:
axmlから生成:
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/03/17 02:38