以编程方式设置android活动的外观

时间:2017-05-25 07:04:34

标签: c# xaml xamarin.android

我要从代码中设置我的应用程序的用户界面,但它已经面临一个奇怪的问题,这完全阻止了我。我在活动中有一个线性布局,它应该包含一些元素(其他线性布局),所以我可以有一种菜单。第一个线性布局被视为容器,其子元素是按钮。问题是, 只有第一个按钮显示在容器中而其他按钮被忽略!

为了实现这一目标,首先我在XAML文件中编写了一些标签。我实际编码了菜单的基本结构。

<!--Menu Container!-->
    <LinearLayout
        android:id="@+id/TopMenueHolder"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_weight="1"
        android:layout_height="0dp"
        android:background="@android:color/white">
      <!-- Buttons-->
        <LinearLayout
            android:id="@+id/MenueButton1"
            android:orientation="vertical"
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:background="@android:color/darker_gray"
            android:layout_gravity="left" />
        <LinearLayout
            android:id="@+id/MenueButton2"
            android:orientation="vertical"
            android:layout_height="match_parent"
            android:layout_width="0dp"
            android:background="@android:color/white"
            android:layout_gravity="left" />etc

然后我尝试从代码后面设置属性。

 private void SetTopMenueStyle()
        {
            var buttonWidth = Convert.ToInt16(ScreenWidth / 5);
            var menueButtonsList = new List<int>
            {
                Resource.Id.MenueButton1,
                Resource.Id.MenueButton2,
                Resource.Id.MenueButton3,
                Resource.Id.MenueButton4,
                Resource.Id.MenueButton5
            };

            foreach (var buttonId in menueButtonsList)
            {
                var button = FindViewById(buttonId) as LinearLayout;
                if (button != null)
                {
                    var layoutParams = new LinearLayout.LayoutParams(buttonWidth,ViewGroup.LayoutParams.MatchParent);
                    button.LayoutParameters = layoutParams;
                    button.Click += menueButton_Click;
                }
            }
        }

Oncreate方法中调用此方法。根据我的机器人研究,它已被放置在正确的位置。我还调试了源代码,发现代码已经很好地调整了所有内部元素的属性(宽度和高度)。那么问题是什么?

1 个答案:

答案 0 :(得分:0)

似乎我唯一需要做的就是将父级和子级方向都改为水平方向,因为这些按钮将通过x轴占据屏幕。

<LinearLayout
        android:id="@+id/ButtonsHolder"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@android:color/holo_blue_light"
        android:layout_weight="1">
        <LinearLayout
            android:id="@+id/LoginButton"
            android:orientation="horizontal"
            android:background="@android:color/white"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="1" />etc