#button #xamarin #grid #margin
#кнопка #xamarin #сетка #поле
Вопрос:
У меня есть сетка, содержащая набор кнопок. Я установил для columnSpacing сетки значение 0, но у меня все еще есть поле между кнопками. Я предположил, что это элемент управления кнопкой. Даже если я установлю поле для кнопки равным 0, результат будет тот же.
Я не могу использовать BoxView, мне нужен текст и кликабельный на нем.
Ответ №1:
Старая тема, но я получал это на своей платформе Android. Обновление Xamarin.Формы от 2.5 до недавно выпущенного 3.1, похоже, решили эту проблему.
Ответ №2:
Проблема в том, что кнопка Android имеет фоновый рисунок по умолчанию, который имеет поле. Вы можете удалить его с помощью пользовательского средства визуализации. Xamarin.Формирует пользовательский рендерер
Пример:
using System;
using test.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(Button), typeof(DefaultButtonRenderer))]
namespace test.Droid
{
public class DefaultButtonRenderer: ButtonRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Button> e)
{
base.OnElementChanged(e);
// Control is Android.Widget.Button, Element is Xamarin.Forms.Button
if (Control != null amp;amp; Element != null)
{
// remove default background image
Control.Background = null;
// set background color
Control.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
}
}
protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
if (e.PropertyName == "BackgroundColor")
{
// You have to set background color here again, because the background color can be changed later.
Control.SetBackgroundColor(Element.BackgroundColor.ToAndroid());
}
}
}
}
Этот код удалит эффект нажатия кнопки. Если вы хотите сохранить эффект, вам нужно установить управление.Фон для правильного ресурса. (например: Android.Ресурс.Атрибут.selectableItemBackground)
В качестве альтернативы вы можете использовать label с помощью TapGestureRecognizer. Вы можете добавить TapGestureRecognizer к любому представлению.