我正在尝试以编程方式添加一些按钮。但由于某种原因,长文本会在我的线性布局中按下整个按钮。
按钮:
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>
因为我可以看到按钮的内容不应该移动按钮的位置。但确实如此。有什么想法吗?
答案 0 :(得分:0)
在你的按钮上添加
setEllipsize(TextUtils.TruncateAt.MARQUEE);
答案 1 :(得分:0)
Okey显然LinearLayout的工作原理是它根据..文本(?)的位置或组件的内容来布局其组件。
所有按钮的文字在图片中对齐。为了解决这个问题,我添加了
SetGravity(GravityFlags.CenterVertical);
到MyRow的构造函数。