Ala*_*an2 6 android xamarin xamarin.forms
我有一个使用此代码的 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>
Run Code Online (Sandbox Code Playgroud)
iOS 和 Android 视图如下所示:
有什么方法可以更改 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;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您希望更改下划线颜色,您必须创建一个颜色状态列表资源。
在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>
Run Code Online (Sandbox Code Playgroud)
在这里,您可以更改很多内容,但是在 xml 选择器中,我将边框默认设置为蓝色,按下时为绿色,聚焦时为红色。
然后在您的渲染器中,您必须设置本机视图的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;
}
}
Run Code Online (Sandbox Code Playgroud)
这是一个正在运行的gif:
您不需要更改“间隙”,只需调整您的布局,因为目前问题不在于默认偏移量,而在于呈现布局的方式。更改偏移量应被视为最后的手段。
但是,如果您仍然想更改文本和底部边框之间的底部填充,再次在OnElementChanged方法中,将Control's padding设置为:
Control.SetPadding(0, 0, 0, 120);
Run Code Online (Sandbox Code Playgroud)
在这里,我只设置了 120 的底部填充。
注意:创建覆盖所有元素的渲染器并不是一个好方法。在这里,为简单起见,我导出内置Entry类型的渲染器。最好将其包装Entry在您自己的CustomEntry类中,以免全局修改样式。
| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |