5

免责声明:我正在使用 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);
        };

关于为什么阴影不显示的任何想法?我尝试在 上设置SetClipToPadding(false)SetClipChildren(false)tooltip但没有效果。

4

2 回答 2

4

使用该AppCompat方法ViewCompat.SetElevation(View, int)根据需要设置高程。但在棒棒糖之前的设备上,该方法似乎无济于事。我发现将阴影渲染到棒棒糖之前的 UI 元素的唯一方法是使用背景:

  android:background="@android:drawable/dialog_holo_light_frame"

如果您想深入了解该主题,请转到此reddit主题并搜索海拔高度。那里有非常好的更新信息。

于 2016-06-09T09:04:10.543 回答
2

TooltipTest我发现了为什么设置海拔在我的自定义视图上不起作用。问题在于该视图本身没有设置任何背景,并且根据 Android 的文档,背景属性中需要某种资源,无论是颜色还是可绘制的。

正如您从我的原始帖子中看到的那样,在我的TooltipTest类中,它继承自 a FrameLayout,我创建了一个 TextView ( TooltipText) 并将其添加到布局中。然后,在我的Activity班级中,我设置了那个班级的海拔TooltipTest。由于我没有为TooltipTestLayout 类显式设置背景资源,Android 不知道要为什么绘制阴影。

为了解决我的问题,我所要做的就是添加ElevationTooltipText对象,而不是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 属性使用任何类型的可绘制对象。而不是使用SetBackgroundColor(Color color),你可以做Background = (some drawable);

于 2016-06-20T18:02:29.687 回答