2016-09-07 2 views
0

저는 Forms 앱을 쓰고 있습니다. 화면 하단에보기를 배치하는 방법과 일부 항목에 초점이 맞춰지고 키보드가 보이면 키보드 바로 위의보기가 표시됩니까? 안드로이드에서는 Window.SetSoftInputMode(SoftInput.AdjustResize)을 설정할 수 있으며 키보드가 표시/사라질 때마다 Content 크기가 조정됩니다. 그러나 상태 표시 줄이 투명해야하며 SoftInput.AdjustResizeWindowManagerFlags.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)); 
     }; 

    } 

, 당신은 입력을 누르 것이다 때, 아무것도 때문에의 보이지 않는 화면 하단에 남아, "버튼을"변경됩니다 :

이 예제를 가지고 키보드 오버레이.

MainActivity의 onCreate에 Window.SetSoftInputMode(SoftInput.AdjustResize)을 추가하면 항목이 포커스가 맞으면서 상자가 키보드 위로 이동합니다.

또한 Content = al;Content = new ScrollView {Content = al};으로 변경하면 정상적으로 작동합니다.

그러나 MainActivity의 onCreate에 Window.AddFlags(WindowManagerFlags.TranslucentStatus);을 추가하면 더 이상 작동하지 않습니다.

미리 감사드립니다.

+0

나는 KeyboardOverlap 플러그인을 사용합니다. https://www.nuget.org/packages/Xam.Plugins.Forms.KeyboardOverlap/ – Vaikesh

+0

SoftInput.AdjustPan과 같은 것을 시도하십시오. – Vaikesh

+0

팬을 조정해도 아무런 변화가 없습니다. 첫 번째 링크는 안드로이드와 아무 관련이 없습니다. – nicks

답변

1

저는 Forms 앱을 쓰고 있습니다. 화면의 하단에 바로보기를 배치하고 일부 항목에 초점이 맞춰지고 키보드가 보이면 키보드 바로 위의보기가 어떻게됩니까?

Xamarin Forms를 사용하는 경우 UI 요소를 ScrollView에 래핑하면 트릭을 수행해야합니다. 이런 식으로 뭔가 당신이 XAML을 사용하는 경우 :

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

편집

:

가 방금 추가 한 예를 들어 보면, 나는 내가 무슨 일이 일어나고 있는지 알 것 같아요. 따라서 ScrollView 트릭은 키보드 입력이 필요한 요소에 대해서만 작동합니다. 즉, 화면 하단에 엔트리 요소가 있고, 필자가 제안한 것처럼 ScrollView에 모든 내용을 래핑 한 경우 키보드에서 엔트리 요소를 밀어 넣어야합니다. 그러나 귀하의 경우 키보드 하단에있는 boxview가 있습니다.

당신이 Content.SizedChanged에 가지고있는 것은 좋은 생각이지만 키보드가 튀어 나올 때 실제로보기의 크기가 변하지 않는다고 생각합니다. 적어도 키보드가 튀어 나오면 Content.SizeChanged가 호출되지 않습니다.), 코드 일부는 사용자가 제공 한 MCVE에서 페이지를로드 할 때만 호출됩니다.

그러나, 나는 키보드가 이렇게 표시되면 '버튼을'이동 할 수 있었다 :

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

으로

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

를 교체 당신은의 지옥을 가질 수있다 모든 다른 장치 및 방향을위한 그 마술 번역 수를 얻는 시간.내가 아이폰 6 시뮬레이터에서 테스트했을 때 키보드 위로 볼 수 있기 전에 120을 넘어야했다.

희망 하시겠습니까?

+0

하지만 화면에 맞지 않을 경우 내 페이지를 스크롤 할 수있게합니다. 나는 absolutelayout를 사용하고 때로는 보이는 영역 밖으로 밀어서보기를 숨 깁니다. – nicks

+0

플러스 어떤 이유로 그것은'WindowManagerFlags.TranslucentStatus'와 함께 작동하지 않습니다. 그것은 바보처럼 보이기 시작했습니다. – nicks

+0

더 도움을 드리고 싶습니다만,이 시점에서 최소한의 완전하고 검증 가능한 예 (MCVE)가 필요하다고 생각합니다. 하나도 없으면 문제를 해결할 수있는 부분을 추측합니다. 대신 AbsoluteLayout을 화면에 정확히 맞게 ('FillAndExpand') 포맷하고 표시 영역에서보기를 슬라이딩하지 않고 IsVisible을 false로 설정하면 대신에 가까이 있어야합니다. 일. 일종의 [작업 트레이] (https://components.xamarin.com/view/actiontray) 기능을 사용하려고합니까? MCVE가 없으면 나를 위해 무엇이 효과가 있을지 알기가 정말 어렵습니다. –

관련 문제