参见随附的屏幕截图。
红色文本视图(添加用于调试目的)和三个材料设计蓝色按钮都使用相同的垂直约束布局设置进行设置,但蓝色按钮较小。我添加红色字段只是为了查看约束布局是否会造成混乱。使用UI查看器,我可以看到控件实际上与预期大小相同,但是蓝色按钮上有一个空白(红色轮廓来自工具)。经过实验和研究,我发现这似乎是由于支持按钮周围阴影的可能性。这似乎也适用于普通按钮,正如我在演示中也添加了按钮一样,右下角的"Button1"也表现出了同样的行为。我读到改变背景可以取消这种行为,在另外两个Peach "Button1"视图中这样做就去掉了边距,而且使它们在视觉上对触摸交互没有React(点击它们不会产生"涟漪")。沿着消除阴影的道路走下去,我尝试将StateListAnimator设置为null,我试过将OutlineProvider设置为null和custom class,我也试过将elevation和TranslationZ设置为-(都是基于不同的SO文章)。这些似乎都没有释放保留的边距,同时仍然让按钮在被点击时视觉上像按钮一样。
关于如何编程设置一个材质设计按钮,使其不保留阴影空间,并且仍然像一个按钮一样工作,有什么提示吗?
背景:
- Xamarin Android(Xamarin Native,而不是Xamarin Forms)。不要让它阻止你告诉我如何用非Xamarin C#的方式做它,如果需要的话,我会把它翻译回来。
- 屏幕是动态驱动的(因此,通过代码创建而不是布局)
示例代码(修整管道),尽管这实际上主要是添加用户指定的视觉设置:
MaterialButton nativeView = new MaterialButton(ctx, null, Resource.Attribute.materialButtonStyle);
int id = View.GenerateViewId();
nativeView.Id = id;
ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
nativeView.LayoutParameters = layoutParams;
nativeView.SetPadding(0, 0, 0, 0);
nativeView.SetAllCaps(false);
nativeView.CornerRadius = (int)Math.Round(wdg.Curve * 2.22, MidpointRounding.AwayFromZero);
nativeView.StrokeWidth = 2;
base.ApplyFontSettings(wdg.FontInfo, nativeView);
nativeView.StrokeColor = ColorStateList.ValueOf(wdg.BorderColor.Value.ToAndroidColor());
nativeView.SetBackgroundColor(wdg.FillColor.Value.ToAndroidColor());
nativeView.SetTextColor(wdg.ForeColor.Value.ToAndroidColor());
1条答案
按热度按时间nukf8bse1#
一个不完美的解决方案。我已经创建了一个样本来测试它。
一开始我尝试在xml中设置
style="?android:attr/borderlessButtonStyle"
,但是没有成功,后来我尝试在xml中设置边距,比如:LinearLayout和ConstraintLayout都会覆盖按钮的阴影空间,所以我尝试通过编程来设置它:
在xml中,它应该是-7,在后面的代码中,它应该是-16。这在
LinearLayout
中可以工作,但当我将LinearLayout
更改为ConstraintLayout
时,它不工作。因此,您可以将按钮放在LinearLayout
中,而不是ConstraintLayout
中。