长文本在linearlayout中按下按钮

时间:2017-01-13 10:53:44

标签: c# android xaml xamarin

我正在尝试以编程方式添加一些按钮。但由于某种原因,长文本会在我的线性布局中按下整个按钮。

problem 这是我用来复制此行为的代码。

按钮:

   public class MyButton : Button
    {
        public MyButton(Context ctx) : base(ctx)
        {
            SetTextColor(Color.White);
            SetTextSize(Android.Util.ComplexUnitType.Dip, 20);
            var llp = new LinearLayout.LayoutParams(0, 100, 1);
            llp.SetMargins(4, 0, 4, 4);
            LayoutParameters = llp;
            SetBackgroundColor(Color.Black);
        }
    }

行:(我有两行按钮)

  public class MyRow : LinearLayout
    {
        public MyRow(Context context) : base(context)
        {
            if (LayoutParameters == null)
                LayoutParameters = GenerateDefaultLayoutParams();
            LayoutParameters.Height = ViewGroup.LayoutParams.WrapContent;
            LayoutParameters.Width = ViewGroup.LayoutParams.MatchParent;
            ((LinearLayout.LayoutParams)LayoutParameters).Gravity = GravityFlags.Top;
            ((LinearLayout.LayoutParams)LayoutParameters).Weight = 0;
            Orientation = Orientation.Horizontal;
        }
    }

标题:

 public class MyHeader : LinearLayout
    {
        public MyHeader(Context context, IAttributeSet set) : base(context, set)
        {
            Orientation = Orientation.Vertical;
            LayoutParameters = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MatchParent, ViewGroup.LayoutParams.WrapContent, 0);
        }

        protected override void OnAttachedToWindow()
        {
            base.OnAttachedToWindow();
            Draw();
        }

        private void Draw()
        {
            for (int r = 0; r < 2; r++)
            {
                var row = new MyRow(Context);
                for (int i = 0; i < 4; i++)
                {
                    var btn = new MyButton(Context);
                    if (r == 0 && i == 0)
                        btn.Text = "long text long text  long text ";
                    else
                        btn.Text = $"Btn {r}.{i}";
                    row.AddView(btn);
                }
                AddView(row);
            }
        }
    }

然后我在xaml中添加标题,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:minWidth="25px"
    android:minHeight="25px">
    <App1.Resources.layout.MyHeader
        android:minWidth="25px"
        android:minHeight="25px"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/myHeader1" />
</LinearLayout>

因为我可以看到按钮的内容不应该移动按钮的位置。但确实如此。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

在你的按钮上添加

setEllipsize(TextUtils.TruncateAt.MARQUEE);

答案 1 :(得分:0)

Okey显然LinearLayout的工作原理是它根据..文本(?)的位置或组件的内容来布局其组件。

所有按钮的文字在图片中对齐。为了解决这个问题,我添加了

SetGravity(GravityFlags.CenterVertical);

到MyRow的构造函数。