gpt4 book ai didi

android - 谁能想出一个自定义渲染器解决方案来更改 Android 中下划线的颜色?

转载 作者:行者123 更新时间:2023-12-03 14:14:27 24 4
gpt4 key购买 nike

我有一个使用此代码的 Xamarin 表单应用程序:

<Grid
HeightRequest="50"
VerticalOptions="CenterAndExpand"
x:Class="J.Templates.EntryGrid"
x:Name="this"
xmlns ="http://xamarin.com/schemas/2014/form
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" >
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition x:Name="lastColumnWidth" Width="150"/>
</Grid.ColumnDefinitions>
<Label Grid.Column="0" Text="{Binding Text1, Source={x:Reference this}}" />
<Entry Grid.Column="1"
HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="End"
VerticalOptions="FillAndExpand"
TextColor="{DynamicResource LabelLinkColor}"
Keyboard="{Binding EntryKeyboardType, Source={x:Reference this}}"
Text="{Binding EntryText, Source={x:Reference this}}"
FontSize="{DynamicResource LabelTextFontSize}"
FontFamily="{DynamicResource DefaultFont}"
BackgroundColor="Transparent"
</Entry>
</Grid>
iOS 和 Android View 如下所示:
enter image description here
有什么办法可以更改Android下划线颜色以及(如果可能的话)下划线和数字之间的间距。

最佳答案

如果你想删除下划线,那么你必须在 Custom Renderer 中进行。 .

[assembly: ExportRenderer(typeof(Entry), typeof(CustomEntryRenderer))]
namespace CustomEntryUnderline.Android
{
public class CustomEntryRenderer : EntryRenderer
{
public CustomEntryRenderer(Context context)
: base(context)
{
}

protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);

if (Control != null)
{
Control.Background = null;
}
}
}
}
如果你想改变下划线颜色,你必须创建一个 Color state list resource .
在 Android 项目中,在 Resources 下文件夹,新建目录 Color .在其中创建一个 xml 文件,描述 selector可绘制的。我们就叫它 editable_selector.xml .下面是它的样子:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:color="#00ff00"/>
<item android:state_focused="true" android:color="#ff0000"/>
<item android:state_active="false" android:color="#0000ff"/>
</selector>
在这里,你可以改变很多东西,但是在xml选择器中,我已经将边框默认设置为蓝色,按下时为绿色,聚焦时为红色。
然后在你的渲染器中,你必须设置原生 View 的 BackgroundTintList .我们将在 OnElementChanged 中再次这样做。方法。
protected override void OnElementChanged(ElementChangedEventArgs<Entry> e)
{
base.OnElementChanged(e);
if (Control != null)
{
var colorStateList = Context.GetColorStateList(Resource.Color.editable_selector);
Control.BackgroundTintList = colorStateList;
}
}
这是一个正在运行的 gif:
enter image description here
您不需要更改“间隙”,只需调整布局,因为目前的问题不在于默认偏移量,而在于布局的呈现方式。更改偏移量应被视为最后的手段。
但是,如果您仍想更改文本和底部边框之间的底部填充,请再次在 OnElementChanged 中进行更改。方法,设置 Control的填充是这样的:
Control.SetPadding(0, 0, 0, 120);
在这里,我只设置了 120 的底部填充。
注意:创建将覆盖所有元素的渲染器并不是一种好方法。在这里,为简单起见,我正在导出内置 Entry 的渲染器。类型。最好把 Entry 包起来在你自己的 CustomEntry类,以免全局修改样式。

关于android - 谁能想出一个自定义渲染器解决方案来更改 Android 中下划线的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62445564/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com