2016-09-07 5 views
0

Я пишу приложение Форм. Как позиционировать представление прямо в нижней части экрана и когда какая-то запись сфокусирована и клавиатура видна, вид будет прямо над клавиатурой? На андроиде можно установить Window.SetSoftInputMode(SoftInput.AdjustResize), и это сделает размер Content каждый раз, когда клавиатура появляется/исчезает. Однако мне нужно, чтобы строка состояния была прозрачной, а SoftInput.AdjustResize не работает с WindowManagerFlags.TranslucentStatus. Мой вопрос: как разместить положение над клавиатурой без установки SoftInput.AdjustResize?Как разместить изображение прямо над клавиатурой?

Возьмем такой пример:

public Page1() 
    { 
     InitializeComponent(); 

     var al = new StackLayout 
     { 
      HorizontalOptions = LayoutOptions.FillAndExpand, 
      VerticalOptions = LayoutOptions.FillAndExpand 
     }; 

     var button = new BoxView {Color = Color.Red, VerticalOptions = LayoutOptions.EndAndExpand}; 

     var entry = new Entry {HorizontalOptions = LayoutOptions.Fill}; 


     al.Children.Add(entry); 

     al.Children.Add(button); 

     Content = al; 

     Content.SizeChanged += (sender, args) => 
     { 
      button.Layout(new Rectangle(0, Content.Height - 120, App.Dimensions.Width, 120)); 
     }; 

    } 

Если запустить этот код, когда вы будете нажимать на ввод, ничего не изменится, то «кнопки» будет оставаться на нижней части экрана не видны из-за накладывающаяся клавиатура.

Если мы добавим Window.SetSoftInputMode(SoftInput.AdjustResize) в MainActivity's onCreate, он отлично работает, коробка перемещается над клавиатурой на фокусе входа.

Кроме того, если мы изменим Content = al; на Content = new ScrollView {Content = al};, он отлично работает.

Однако, если мы добавим Window.AddFlags(WindowManagerFlags.TranslucentStatus); в onCreate MainActivity, ни один из этих методов больше не работает.

Заранее спасибо.

+0

Я использую плагин KeyboardOverlap https://www.nuget.org/packages/Xam.Plugins.Forms.KeyboardOverlap/ – Vaikesh

+0

Попробуйте что-то вроде SoftInput.AdjustPan – Vaikesh

+0

настроить панорамирование ничего не изменит. первая ссылка не имеет ничего общего с Android. – nicks

ответ

1

Я пишу приложение Форм. Как позиционировать вид в нижней части экрана и когда какая-то запись сфокусирована и клавиатура видна, вид справа над клавиатурой?

Если вы используете Xamarin Forms, то обертывание элементов пользовательского интерфейса в ScrollView должно сделать трюк. Что-то вроде этого, если вы используете XAML:

<ScrollView> 
    <ScrollView.Content> 
     // Your Original XAML content here 
    </ScrollView.Content> 
<ScrollView 

EDIT:

Глядя на пример вы только что добавили, кажется, я знаю, что происходит. Таким образом, ScrollView Trick работает только для элементов, требующих ввода с клавиатуры. Если у вас вместо этого есть элемент ввода в нижней части экрана и завернуты все в ScrollView, как я предложил, тогда клавиатура должна нажать на элемент ввода вверх для вас. Однако в вашем случае у вас есть окно в нижней части экрана, которое клавиатура просто пробегает.

Что вы имеете для Content.SizedChanged - хорошая идея, однако я не думаю, что размер представления фактически изменяется, когда клавиатура всплывает (по крайней мере, Content.SizeChanged не вызывается, когда клавиатура всплывает), так что часть вашего кода действительно вызывается только при загрузке страницы из предоставленного вами MCVE.

ОДНАКО, я был в состоянии двигаться «кнопку», когда клавиатура появляется, делая это:

Заменить

Content.SizeChanged += (sender, args) => 
{ 
    button.Layout(new Rectangle(0, Content.Height - 120, App.Dimensions.Width, 120)); 
}; 

С

entry.Focused += (sender, e) => 
{ 
    button.TranslationY -= 120; 
}; 

Вы можете иметь чертовски время получения этого магического номера перевода для всех разных устройств и ориентации.Когда я тестировал его на симуляторе iPhone 6, мне пришлось пробиваться выше 120, прежде чем я увидел его над клавиатурой.

Надеюсь, что это поможет!

+0

, но это делает мою страницу прокручиваемой, если она не подходит к экрану. Я использую absolutelayout, и иногда я скрываю вид, вытаскивая их из видимой области. – nicks

+0

плюс по какой-то причине он не работает с 'WindowManagerFlags.TranslucentStatus'. он начинает выглядеть глупо. – nicks

+0

Я хотел бы помочь дальше, но я думаю, что в этот момент мне нужен минимальный, полный, проверенный пример (MCVE). Без этого я просто буду угадывать, что может решить ваши проблемы. Я ОБЯЗАТЕЛЬНО скажу, что если вы можете вместо этого форматировать AbsoluteLayout, чтобы точно соответствовать экрану («FillAndExpand»), а затем вместо скользящих представлений из видимой области вы просто устанавливаете IsVisible как ложные на них, вы должны быть близки к за работой. Вы пытаетесь получить какую-то функцию [action tray] (https://components.xamarin.com/view/actiontray)? Без MCVE мне действительно сложно узнать, что будет работать на вас. –

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