Xamarin добавить вид в макет, но не виден на экране - PullRequest
0 голосов
/ 18 мая 2018

Из своего кода я пытаюсь добавить какое-либо представление на экран (для добавления управления динамическим просмотром в будущем), но оно не отображается на моем экране.Для var TextTest в последней строке показывается текстовый результат "0000000000000".Какое свойство мне нужно установить для TextView для отображения этого элемента управления в макете?

[Activity()]
public class LoginActivity : Activity
{ 
    protected override async void OnCreate(Bundle savedInstanceState)
    {
        ActionBar.Hide();
        base.OnCreate(savedInstanceState);
        SetContentView(Resource.Layout.Login); 

        var layout = FindViewById<LinearLayout>(Resource.Id.loginLayout); 
        var button1 = FindViewById<Button>(Resource.Id.btnCallApi); 
        button1.Click += (se, ev) =>
        {
            var param = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent,
                ViewGroup.LayoutParams.WrapContent);
            var textView2 = new TextView(layout.Context) { Id = 123 };
            param.AddRule(LayoutRules.Below, textView2.Id);
            textView2.Text = "0000000000000";
            textView2.SetX(300);  
            textView2.SetY(300);
            textView2.ScaleY = 300;
            textView2.ScaleX = 300;
            textView2.TextSize = 30;
            textView2.SetWidth(300);
            textView2.SetHeight(300);
            layout.AddView(textView2, param);
            layout.Invalidate();
            var newTx = FindViewById<TextView>(123);
            var TextTest = newTx.Text; 
        };
     }
  }

1 Ответ

0 голосов
/ 18 мая 2018

Вы указываете слишком много параметров одновременно, и большинство из них не нужны.

LinearLayout автоматически размещает своих дочерних элементов, поэтому вам не нужно указывать их позиции.

Кроме того, значения масштабирования равны 300, что фактически означает, что объект будет масштабироваться 300 раз, то есть до 30000% от исходного размера.Я сомневаюсь, что вы этого хотите.

Итак, подытоживая это, для начала избавимся от большинства изменений свойств, отобразите текстовое представление и затем постепенно начните применять эти параметры (если они вам действительно нужны)..

// var param = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent,
//ViewGroup.LayoutParams.WrapContent);
var textView2 = new TextView(layout.Context) { Id = 123 };
//param.AddRule(LayoutRules.Below, textView2.Id);
textView2.Text = "0000000000000";
//textView2.SetX(300);
//textView2.SetY(300);
//textView2.ScaleY = 300;
//textView2.ScaleX = 300;
//textView2.TextSize = 30;
//textView2.SetWidth(300);
//textView2.SetHeight(300);
layout.AddView(textView2/*, param*/);
//layout.Invalidate();
//var newTx = FindViewById<TextView>(123);
//var TextTest = newTx.Text;
...