为什么我不能在以编程方式添加的视图上设置高度?
Why can't I set the elevation on a view that I add programmatically?
免责声明:我正在使用 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),但这没有效果。
使用 AppCompat
方法 ViewCompat.SetElevation(View, int)
根据需要设置高度。但在 Lollipop 之前的设备上,该方法似乎什么都不做。
我发现将阴影渲染到 pre-Lollipop UI 元素的唯一方法是使用背景代替:
android:background="@android:drawable/dialog_holo_light_frame"
如果您想深入了解此主题,请转至此 reddit 主题并搜索 elevation。那里有非常好的更新信息。
我发现为什么在我的自定义 TooltipTest
视图中设置海拔高度不起作用。问题在于该视图本身没有任何背景设置,根据 Android 的文档,背景中需要某种资源 属性,无论是颜色还是一些可绘制的。
正如您从我的原始 post 中看到的那样,在我的 TooltipTest
class 中,它继承自 FrameLayout
,我创建了一个 TextView(TooltipText
) 并将其添加到布局中。然后,在我的 Activity
class 中,我设置了 TooltipTest
class 的高度。由于我没有为 TooltipTest
布局 class 显式设置背景资源,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 上添加阴影 class,你需要设置背景 属性:
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);
}
以后一种方式进行操作会给您带来丑陋的白色背景,并在其下方有阴影。但是,您可以为背景使用任何类型的可绘制对象 属性。除了使用 SetBackgroundColor(Color color)
,您还可以使用 Background = (some drawable);
免责声明:我正在使用 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),但这没有效果。
使用 AppCompat
方法 ViewCompat.SetElevation(View, int)
根据需要设置高度。但在 Lollipop 之前的设备上,该方法似乎什么都不做。
我发现将阴影渲染到 pre-Lollipop UI 元素的唯一方法是使用背景代替:
android:background="@android:drawable/dialog_holo_light_frame"
如果您想深入了解此主题,请转至此 reddit 主题并搜索 elevation。那里有非常好的更新信息。
我发现为什么在我的自定义 TooltipTest
视图中设置海拔高度不起作用。问题在于该视图本身没有任何背景设置,根据 Android 的文档,背景中需要某种资源 属性,无论是颜色还是一些可绘制的。
正如您从我的原始 post 中看到的那样,在我的 TooltipTest
class 中,它继承自 FrameLayout
,我创建了一个 TextView(TooltipText
) 并将其添加到布局中。然后,在我的 Activity
class 中,我设置了 TooltipTest
class 的高度。由于我没有为 TooltipTest
布局 class 显式设置背景资源,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 上添加阴影 class,你需要设置背景 属性:
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);
}
以后一种方式进行操作会给您带来丑陋的白色背景,并在其下方有阴影。但是,您可以为背景使用任何类型的可绘制对象 属性。除了使用 SetBackgroundColor(Color color)
,您还可以使用 Background = (some drawable);