【问题标题】:Position child views of relative layout in C# code in Xamarin.Native (specifically Android)在 Xamarin.Native(特别是 Android)的 C# 代码中定位相对布局的子视图
【发布时间】:2019-05-17 14:25:23
【问题描述】:

我正在尝试通过 Xamarin.Android 中的 C# 代码将新视图动态添加到现有的相对布局中。我还没有找到任何关于如何在相对布局中定位子视图的解决方案。现在它们只是放置在应用程序左上角的默认位置。我在 Xamarin.Forms 中看到了这个问题的解决方案,但在 Xamarin.Native 中没有看到。

我已经能够通过将 ViewGroup.LayoutParams 传递给相关布局对象的 AddView 方法来指定视图的宽度和高度,但是该类没有处理位置的构造函数等。

var root = FindViewById<RelativeLayout>(Resource.Id.relativeLayout1);

var tv = new TextView(this);

root.AddView(tv, new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WrapContent,
ViewGroup.LayoutParams.WrapContent));

我希望能够通过 C# 在电视视图上使用“layout_below”,而不是通过 AXML 静态使用。

【问题讨论】:

    标签: c# xamarin.android


    【解决方案1】:

    您只需要使用 AddRule() 将规则添加到布局参数中,以将视图置于另一个之下。这是我放在一起的示例,它添加了两个 TextView,第一个放置在顶部(使用 .AlignTop),第二个放置在第一个下方(使用 .Below)。

    protected override void OnCreate(Bundle savedInstanceState) {
        base.OnCreate(savedInstanceState);
    
        RelativeLayout rl = new RelativeLayout(this);
    
        TextView tv1 = new TextView(this) {Id = View.GenerateViewId(), Text = "TextView #1"};
        RelativeLayout.LayoutParams parms1 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
        parms1.AddRule(LayoutRules.AlignTop);
        tv1.LayoutParameters = parms1;
        rl.AddView(tv1);
    
        TextView tv2 = new TextView(this) {Id = View.GenerateViewId(), Text = "TextView #2"};
        RelativeLayout.LayoutParams parms2 = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
        parms2.AddRule(LayoutRules.Below, tv1.Id);
        tv2.LayoutParameters = parms2;
        rl.AddView(tv2);
    
        SetContentView(rl);
    }
    

    截图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多