2016-03-23 2 views
4

Я хочу иметь маленькую кнопку. Высота кнопки - 30. На некоторых платах (Android, UWP) текст внутри кнопки отключается. Это потому, что между текстом и внешней границей есть отступы.Xamarin.Forms: Удалите обивку внутри кнопки

Один из вариантов - сделать кнопку более крупной, но для текста достаточно места. Есть ли опция для настройки внутренней прокладки?

ответ

1

Возможно, вы можете сыграть с FontSize, чтобы соответствовать кнопке HeightRequest, если только вам не нужно создавать собственный рендерер для установки прокладки.

+0

Таким образом, нет никакой возможности. Я мог бы использовать разные 'FontSize' для каждой платформы, но если я хочу, чтобы он был совершенным, мне нужен пользовательский рендерер. – testing

5

Один из вариантов - использовать ярлык вместо кнопки и использовать TapGestureRecognizer вместо событий Click. Ярлык дает вам больше контроля над макетом текста, чем Button, но вы не получаете того преимущества, что он переводится в собственный кнопочный элемент управления на каждой платформе.

+0

Я делаю это много. Но я заметил, что производительность на Android по сравнению с кнопкой. 1) вы должны точно нажимать на текст (иногда тонкий) и 2) приложенная команда не срабатывает так же быстро, как с помощью кнопки. –

+0

TapGestureRecognizers также конфликтуют с ScrollViews. – oXeNoN

3

На Android вы можете сделать это со стилем.

Ресурсы/ценности-v21/styles.xml

<?xml version="1.0" encoding="utf-8" ?> 
<resources> 
    <style name="myTheme" parent="android:Theme.Material"> 
    <item name="android:buttonStyle">@style/noPaddingButtonStyle</item> 
    </style> 

    <style name="noPaddingButtonStyle" parent="android:Widget.Material.Button"> 
    <item name="android:paddingLeft">0dp</item> 
    <item name="android:paddingRight">0dp</item> 
    </style> 
</resources> 

AndroidManifest.xml

Набор пользовательских тему в качестве темы приложения.

<application android:label="$safeprojectname$" android:theme="@style/myTheme"></application> 

Это установка левого и правого поля для 0dp. Стиль по умолчанию имеет отступы.

Это работает на Android> = 5. Если вы хотите поддерживать более низкие версии Android, вам нужно добавить несколько папок стилей и использовать другие базовые темы, такие как Theme.Holo или Theme.AppCompat.


Или вы идете для видеообработки:

using App6.Droid; 
using Xamarin.Forms; 
using Xamarin.Forms.Platform.Android; 

[assembly: ExportRenderer(typeof(Button), typeof(ZeroPaddingRenderer))] 
namespace App6.Droid 
{ 
    public class ZeroPaddingRenderer : ButtonRenderer 
    { 
     protected override void OnElementChanged(ElementChangedEventArgs<Button> e) 
     { 
      base.OnElementChanged(e); 

      Control?.SetPadding(0, Control.PaddingTop, 0, Control.PaddingBottom); 
     } 
    } 
} 
+0

Привет, Свен, я новичок в пользовательских рендерерах. Я хочу добавить этот пользовательский рендерер. Я сохранил его под моим проектом Droid. Как я могу убедиться, что моя кнопка может получить доступ к методу SetPadding выше в Xamarin.Forms? Благодаря! –

+2

Вы должны создать свой собственный Xamarin.Forms Control 'MyButton: Button' со связующим свойством' Padding', а затем использовать показанный рендер, но с помощью '[assembly: ExportRenderer (typeof (MyButton), typeof (ZeroPaddingRenderer))] здесь является шаг за шагом https://developer.xamarin.com/guides/xamarin-forms/custom-renderer/entry/ –

+0

Или, может быть, проще использовать Эффект вместо настраиваемого средства визуализации: http://codeworks.it/blog/? p = 433 –

Смежные вопросы