免责声明:我使用的是Xamarin.Android。
我创建了一个视图,设置了它的高程,然后将其添加到我的主布局中。当我触发事件时,视图成功地添加到布局中,但是没有任何高程阴影。
以下是我的工作内容:
以编程方式添加的视图:
public class TooltipTest : FrameLayout
{
private Context context;
private ShapeDrawable box;
private View carrot;
private string message;
public TextView TooltipText
{
get;
private set;
}
public TooltipTest(Context context, string message) : base(context)
{
this.context = context;
this.message = message;
Initialize();
}
private void Initialize()
{
CreateText();
}
private void CreateText()
{
int paddingTopBottom = 30;
int paddingLeftRight = 27;
TooltipText = new TextView(context);
TooltipText.Text = message;
TooltipText.SetTextColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipText)));
TooltipText.SetTextSize(ComplexUnitType.Sp, 14f);
TooltipText.SetPadding(paddingLeftRight, paddingTopBottom, paddingLeftRight, paddingTopBottom);
TooltipText.SetBackgroundColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipBackground)));
AddView(TooltipText);
}
添加视图的事件:
ButtonTest.Click += (sender, e) => {
var tooltip = new TooltipTest(this, Resources.GetString(Resource.String.test_text));
var tooltipParams = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.WrapContent, ViewGroup.LayoutParams.WrapContent);
tooltip.Elevation = 20f;
ParentLayout.AddView(tooltip, tooltipParams);
};
关于阴影为什么没有表现出来的任何想法?我已尝试在tooltip
上设置 SetClipToPadding(false)和 SetClipChildren(false),但这没有效果。
答案 0 :(得分:3)
使用AppCompat
方法ViewCompat.SetElevation(View, int)
根据需要设置高程。但是在Lollipop之前的设备上,该方法似乎无能为力。
我发现为前Lollipop UI元素渲染阴影的唯一方法是使用背景:
android:background="@android:drawable/dialog_holo_light_frame"
如果您想更多地了解此主题,请转到此reddit主题并搜索高程。那里有非常好的更新信息。
答案 1 :(得分:1)
我发现为什么设置高程不适用于我的自定义TooltipTest
视图。问题是该视图本身没有任何背景设置,并且根据Android的文档,背景属性中需要某种资源,无论是颜色还是可绘制的。
从我的原始帖子中可以看到,在TooltipTest
类中继承了FrameLayout
,我创建了一个TextView(TooltipText
)并将其添加到布局中。然后,在我的Activity
课程中,我在TooltipTest
课程上设置了提升。由于我没有为TooltipTest
布局类显式设置背景资源,因此Android不知道要为其绘制阴影的内容。
我需要做的就是修复我的问题是将Elevation
添加到TooltipText
对象,而不是TooltipTest
对象。
private void CreateText()
{
int paddingTopBottom = 30;
int paddingLeftRight = 27;
TooltipText = new TextView(context);
TooltipText.Text = message;
TooltipText.SetTextColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipText)));
TooltipText.SetTextSize(ComplexUnitType.Sp, 14f);
TooltipText.SetPadding(paddingLeftRight, paddingTopBottom, paddingLeftRight, paddingTopBottom);
TooltipText.SetBackgroundColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipBackground)));
TooltipText.Elevation = 21f; //(or whatever value you want)
AddView(TooltipText);
}
如果你想在TooltipTest类上使用阴影,则需要设置Background属性:
private void CreateText()
{
int paddingTopBottom = 30;
int paddingLeftRight = 27;
TooltipText = new TextView(context);
TooltipText.Text = message;
TooltipText.SetTextColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipText)));
TooltipText.SetTextSize(ComplexUnitType.Sp, 14f);
TooltipText.SetPadding(paddingLeftRight, paddingTopBottom, paddingLeftRight, paddingTopBottom);
TooltipText.SetBackgroundColor(new Color(ContextCompat.GetColor(context, Resource.Color.tooltipBackground)));
SetBackgroundColor (new Color (ContextCompat.GetColor (context, Resource.Color.white)));
AddView(TooltipText);
}
以后一种方式做它会给你一个丑陋的白色背景,下面有一个阴影。但是,您可以为Background属性使用任何类型的drawable。您可以执行SetBackgroundColor(Color color)
Background = (some drawable);